题
只需要看到如果一个段落包含“停止词”时,停止字是在下面的阵列。
我有式为:
$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");
foreach ($pattern_array as $pattern) {
if (preg_match('/'.$pattern.')/i', $paragraph)) {
$stopwords = 1;
}
}
这工作得很好,但对于像像“panko”被确定为停用词。“锅”字短词
因此,正则表达式将是类似的东西具有之前它有一个空间或者是一个新行的开始和在完全停止/空间/逗号/(其他非字符对象)任一端。
另外我怎么能告诉PHP尽快停止字被确定退出循环?
谢谢你们,减缓学习正则表达式,我去!
解决方案
使用\b(preheat|minutes|stir|heat|put|bowl|pan)\b
为您的正则表达式。这样,你只需要一个正则表达式(没有循环需要),并通过使用\b
字边界断言,您确保只有整个单词匹配。
其他提示
没有试过,但\b
应该是你要找的字符组。从 PHP手册:
\b word boundary
您的代码,然后将是这个样子:
$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");
foreach ($pattern_array as $pattern) {
if (preg_match('/\b'.$pattern.'\b/i', $paragraph)) { // also removed the ')'
$stopwords = 1;
break; // to exit the loop
}
}
编辑:看来人最好使用\ B,所以改变了这种相应
您需要\b
(代表字边界)添加到您的正则表达式是这样的:
'/\b'.$pattern.'\b/i'
您似乎已经在你的代码一个错字,因为无论你有一个文字右括号(和不匹配的词的部分),或者你有一个开放的右括号。
<强> 1 强>可以使用 “\ b” 的检查字边界。词边界被定义为一个字字符和非字符字之间的边界。字字符包括字母,数字和下划线
2 您可以一气呵成做这一切,通过使用 “|”:
$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)
不隶属于 StackOverflow