我使用以下代码来匹配字符串中的单词但有一些问题。
$string='Hi how are u am fine and where are you';
$shop = array( array( Title => "no",),array( Title => "block",),array( Title => "How",));
foreach($shop as $t=>$v)
{
foreach($v as $n)
{
if((preg_match("/\b^([^\s]*)$|" . $n . "\b/i",$string)))
{
$match='Y';
break;
}
}
}
案例:1 $string='block'
正常;
案例:2 $string='words block'
正常;
案例:3 $string='block word'
无效。
请找到错误,有人帮我解决问题。
答案 0 :(得分:0)
根据您希望实现的目标,您可能需要重新考虑正则表达式模式构建的方法。但是,当前的问题有一个问题:您在双引号字符串文字中定义它,其中反斜杠用于引入转义序列。要真正匹配单词边界,您需要使用双反斜杠(即"/\\bHow\\b/"
将匹配整个单词How
,"/\bHow\b/"
匹配退格符,如何和退格字符。)
此外,\b
字边界也匹配字符串的开头。没有必要使用\b^
- 这是不明确的。我想你首先尝试匹配任何非空白字符串,然后是特定的整个字。
使用:
$re = '/^([^\s]*)$|\b' . trim($n) . '\b/i';
请参阅IDEONE demo,为$string='block word'
显示Y.