preg_match不用于长正则表达式

时间:2015-08-04 07:35:01

标签: php preg-match

我想在php中使用preg_match匹配关键字。 正则表达式在www.regexr.com上完美运行,但不在我的PHP代码中。有人可以帮忙吗三江源。

<?php

$regexx="/[sS]+([\s\t\r]*[\.\~\`\!\@\#\$\%\^\&\*\(\)\-\_\+\=\[\]\{\}\;\:\"\'\\\|\,\.\<\>\/\?\d\w]*)+[hH]+([\s\t\r]*[\.\~\`\!\@\#\$\%\^\&\*\(\)\-\_\+\=\[\]\{\}\;\:\"\'\\\|\,\.\<\>\/\?\d\w]*)+[aA]*([\s\t\r]*[\.\~\`\!\@\#\$\%\^\&\*\(\)\-\_\+\=\[\]\{\}\;\:\"\'\\\|\,\.\<\>\/\?\d\w]*)+[rR]*([\s\t\r]*[\.\~\`\!\@\#\$\%\^\&\*\(\)\-\_\+\=\[\]\{\}\;\:\"\'\\\|\,\.\<\>\/\?\d\w]*)+[eE]*
/";
if (preg_match($regexx, "S-hare"))
{
    echo 'succeeded';
}
else
{
    echo 'failed';
}

?>

1 个答案:

答案 0 :(得分:1)

根据您的评论:

  

我想匹配&#39;分享&#39;以任何格式书写。例如..之间的任何特殊字符或空格&#39; share&#39;会被发现。

我建议只删除每个非字母字符,然后匹配剩下的字符。

var_dump($str = preg_replace("/[^a-z]/i", "", "sh@a/#~r:  e !!!"));
var_dump($str === "share");

原始单一正则表达式解决方案可能是:
/[^a-z]*s[^a-z]*h[^a-z]*a[^a-z]*r[^a-z]*e[^a-z]*/i
这是简单的共享和[^a-z]*,以匹配每个字母之间的任何非字母系列字符。