正则表达式模式匹配错误

时间:2015-09-28 15:43:47

标签: php regex preg-match-all

我有一个正在尝试匹配字符串的正则表达式模式,但它正在不正确地执行它所以我将指出正则表达式模式的一部分以及它希望这次正确的做法:

~  : the start of the regex pattern
,  : trying to match the , at the start of the string
.* : 0 or more of any characters in between
=? : stop at the first match of the rest of the pattern
\. : a period
\" : a quote
/  : a slash
>  : arrow right
<  : arrow left
~  : end of pattern

代码:

$content = ", not good in any manner or degree. See more.\"/><"

$regex = "~,.*=?\.\"/><~"; 
preg_match_all("/$regex/siU", $content, $matches);

echo "<pre>";
print_r($matches);
echo "</pre>";

错误:

Unknown modifier '/'
Unknown modifier '>'
Unknown modifier '<'

但据我所知,只有这些[\ ^ $。|?* +(){}是需要转义的正则表达式元字符。无论如何,我逃过了/和&lt;,然后错误就消失了,但这次我得到了一个空数组。

$regex = "~,.*=?\.\"\/\>\<~"; 
preg_match_all("/$regex/siU", $content, $matches);

echo "<pre>";
print_r($matches);
echo "</pre>";

结果:

Array
(
    [0] => Array
        (
        )
)

谁能告诉我我做错了什么?

1 个答案:

答案 0 :(得分:2)

你必须逃避所有反斜杠,并且你使用两个分隔符~/,你可以使用下面的代码:

$regex = "~,.*=?\\.\"/><~siU"; 
preg_match_all("$regex", $content, $matches);

您可以使用任何regex在线工具(如regex101

)快速查看此内容

https://regex101.com/r/dT1pQ7/1

顺便说一下,不确定您是否想要=可选,=?使=成为可选。

更新:在第一场比赛中阅读你的评论“停止”后,你必须使用非贪婪的算子,在量词之后添加?Chris表示诀窍,所以{{1 }或.+?是懒惰或不同意的量词,使其在第一次出现时停止