获取两个子字符串之间的文本[重复]

问题描述 投票:0回答:2

如何从下面的字符串中提取

https://example.com/gamer?hid=.115f12756a8641
,即从url

rrth:'http://www.google.co',cctp:'323',url:'https://example.com/gamer?hid=.115f12756a8641',rrth:'https://another.com'

php text-extraction
2个回答
4
投票

如果您的输入字符串名为

$str
:

preg_match('/url:\'(.*?)\'/', $str, $matches);
$url = $matches[1];

(.*?)
捕获
url:'
'
之间的所有内容,稍后可以使用
$matches[1]
检索。

?
尤为重要。它使重复变得不贪婪,否则它会消耗一切直到最后
'

如果您的实际输入字符串包含多个

url:'...'
部分,请改用
preg_match_all
$matches[1]
将是所有必需值的数组。


0
投票

简单的正则表达式:

preg_match('/url\s*\:\s*\'([^\']+)/i',$theString,$match);
echo $match[1];//should be the url

工作原理:

/url\s*\:\s*
:匹配
url
+ [任意数量的空格] +
:
(冒号)+ [任意数量的空格]
但是我们不需要这个,这就是第二部分的来源
\'([^\']+)/i
:匹配
'
,然后括号(
()
)创建一个,将单独存储在
$matches
数组中。将匹配的是
[^']+
:除撇号之外的任何字符(
[]
创建字符类,
^
表示:排除这些字符)。因此,此类将匹配任何字符,直至到达结束/定界撇号。
/i
:如果字符串可能包含
URL:'http://www.foo.bar'
,我添加了
i
,这是不区分大小写的标志。

就是这样。
也许你可以在这里嗅一下以更好地理解正则表达式

注意:我必须转义单引号,因为模式字符串使用单引号作为分隔符:

"/url\s*\:\s*'([^']+)/i"
也同样有效。如果您不知道天气,您将处理单引号或双引号,您可以将引号替换为另一个 char 类:

preg_match('/url\s*\:\s*[\'"]([^\'"]+)/i',$string,$match);

显然,在这种情况下,您必须转义用于模式字符串的分隔符...

© www.soinside.com 2019 - 2024. All rights reserved.