我如何可以提取https://domain.com/gamer?hid=.115f12756a8641
从下面的字符串,即从网址获取正则表达式
rrth:'http://www.google.co',cctp:'323',url:'https://domain.com/gamer?hid=.115f12756a8641',rrth:'https://another.com'
PS:我是新来的正则表达式,我学习。但上面的字符串似乎被格式化因此,某种捷径必须在那里。
我如何可以提取https://domain.com/gamer?hid=.115f12756a8641
从下面的字符串,即从网址获取正则表达式
rrth:'http://www.google.co',cctp:'323',url:'https://domain.com/gamer?hid=.115f12756a8641',rrth:'https://another.com'
PS:我是新来的正则表达式,我学习。但上面的字符串似乎被格式化因此,某种捷径必须在那里。
如果你输入的字符串被称为$str
:
preg_match('/url:\'(.*?)\'/', $str, $matches);
$url = $matches[1];
(.*?)
url:'
和'
之间捕捉一切,以后可以用$matches[1]
检索。
?
特别重要。它使重复不合格,否则它会消耗一切,直到最后的'
。
如果您的实际输入字符串包含多个url:'...'
部分,请改为使用preg_match_all
。然后$matches[1]
将是所有需要值的数组。
简单的正则表达式:
preg_match('/url\s*\:\s*\'([^\']+)/i',$theString,$match);
echo $match[1];//should be the url
它是如何工作的:
/url\s*\:\s*
:匹配url
+任意数量的空格] + :
(冒号)+ [任意数量的空格]
但我们不” t需要这个,那就是第二部分来的地方
\'([^\']+)/i
:匹配'
,然后括号(()
)创建一个组,那将存储s单独在$matches
阵列中。将匹配的是[^']+
:除撇号外的任何字符([]
创建字符类,^
表示:排除这些字符)。所以这个类将匹配任何字符,直到它到达结束/定界撇号。
/i
:如果字符串可能包含URL:'http://www.foo.bar'
,我添加了i
,这是不区分大小写的标志。
就是这样。
Perhaps you could sniff around here,以获得更好的理解正则表达式的
注意:我不得不逃脱单引号,因为该模式字符串使用单引号作为分隔符:"/url\s*\:\s*'([^']+)/i"
作品一样好。如果你不知道天气或不是你会处理单或双引号,你可以用另一个字符类取代报价:
preg_match('/url\s*\:\s*[\'"]([^\'"]+)/i',$string,$match);
显然,在这种情况下,你必须逃脱你用于模式字符串的分隔符...
不知道你从哪里得到它,但可能有更好的方法从这个比正则表达式提取数据。例如,该字符串看起来非常接近JSON。如果您可以稍微重新格式化,可以使用'json_decode()'将所有数据转换为格式良好的数组。 – SDC