我的正则表达式没有正确捕获组

时间:2017-02-20 14:27:06

标签: php regex

我的代码中有一个字符串,如下所示:

href="http://mywebsite.com/site/link.php?M=191123&N=34&FL=H&L=7"

我需要抓取的是/site/后的所有内容,因此我使用以下代码尝试:

preg_match("/site\/(.*?)(?:\"|')/i", $href, $pmatch);
$params = json_encode($pmatch);

但是当我回复$params时,我得到了[]的值,所以它没有匹配它应该拥有的任何组?

修改

问题是,我在一个单独的php文件中使用此代码:

$href = 'href="http://mysite/em/site/link.php?M=191123&N=34&FL=H&L=7"';
preg_match("/site\/([^\"']*)/i", $href, $matches);
$params = $matches[1];

echo $params;

它工作精细??

1 个答案:

答案 0 :(得分:0)

如果你想捕获一切引用(我假设href =和引号是你要搜索的文本的一部分),那么就这样使用:

/site\/([^\"']*)/i

顺便说一句,你的正则表达式适用于Regex 101,所以也许还有别的错误?

确定最后一个引号是您要搜索的字符串的一部分吗?只需将其更改为此,看看它是否有效:

/site\/(.*)/i

实际上这并不重要,因为之前的正则表达式不会测试最后一个引用。

你的一个是不正确的。在拨打电话之前尝试打印$ href的值。