得到正则表达式

时间:2012-10-23 16:13:05

标签: php regex

如何从以下字符串中提取https://domain.com/gamer?hid=.115f12756a8641,即来自 url

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

P.s:我是正则表达式的新手,我正在学习。但上面的字符串似乎是格式化的。所以必须有某种捷径。

2 个答案:

答案 0 :(得分:4)

如果您的输入字符串被称为$str

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

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

?特别重要。它使得重复不成熟,否则它会消耗所有内容直到最后'

如果您的实际输入字符串包含多个url:'...'部分,请改用preg_match_all$matches[1]将是所有必需值的数组。

答案 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,这是不区分大小写的标志。

就是这样。
Perhaps you could sniff around here要更好地理解正则表达式

注意:我必须转义单引号,因为模式字符串使用单引号作为分隔符:"/url\s*\:\s*'([^']+)/i"也可以。如果您不知道天气,您将处理单引号或双引号,您可以用另一个char类替换引号:

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

显然,在那种情况下,你必须逃避你用于模式字符串的分隔符......