Preg_match(REGEX) - 如何区分认可和信用?

时间:2014-04-21 07:10:36

标签: php regex

我发现当preg_match包含认可,计划和快乐等字词时,我的$_POST['subject']代码会被激活。我如何调整我的正则表达式,以防止这种情况发生?我只希望它匹配单词credit或gram或app(case不重要,因此'i') - 而不是包含它们的单词。

if(preg_match("/credit|gram|app/i", $_POST['subject']))

1 个答案:

答案 0 :(得分:1)

克里斯,一般来说,如果你想要匹配一个确切的单词,你需要在单词周围添加单词边界:

if(preg_match("/\bcredit\b|\bgram\b|\bapp\b/i", $_POST['subject']))

边界\b不消耗任何字符。它断言,一方面有“单词字符”,另一方面则没有。

这只是确保匹配整个单词的几种方法之一,但它是最简单的方法之一。对于更复杂的情况,经常使用前瞻和后视。

另一个选项是Joe提到的选项:如果实际上你试图匹配整个字符串,那么你可以通过在字符串锚^和{{1}的开头和结尾之间构建它来断言}

这会给你:

$

请注意,在if(preg_match("/^(?:credit|gram|app)$/i", $_POST['subject'])) ^之间,我们将替换放在括号中。这确保了匹配的单词,它将是整个字符串。

交替开始时的$就是指示括号是非捕获的。