我有一个像这样的值的数组:
$needles = array(
'hide',
'foo',
'bar'
);
我想用这样的字符串搜索这些针:
$string = 'lets unhide this div';
foreach( $needles as $needle ):
if( strpos( $string, $needle ) ) echo 'do stuff';
endforeach;
到目前为止,这种方法效果很好,但是存在上述示例中的取消隐藏但不应该捕获的问题。我知道我只是可以在针周围添加白色空间,但事实如下:
搜索应该抓住那个开头的单词(隐藏而不是 un 隐藏),但应该将单词的结尾打开,以便隐藏 ous 。这在我所知道的英语中可能没什么意义,但这正是我所需要的行为(因为它在德语中非常有效)。
所以我需要这样的正则表达式:
if( strpos( preg_match( 'stringstartorwhitespace|'.$needle.'|anythingexceptwhitespace|whitespace' ), $string ) ) echo 'do stuff';
以下是一些结果
schön in schön = 1
schön in unschön = 0
schön in schönes = 1
schön in schönstes = 1
schön in schönem = 1
答案 0 :(得分:1)
直到我明白,您需要word boundary,表示为\b
。正则表达式将是
\bschön
<强> Regex Demo 强>
PHP代码
$re = "/\\bschön/";
$str = array("schön", "unschön", "schönes", "schönstes", "schönem");
foreach ($str as $x) {
if (preg_match($re, $x)) {
print($x."\n");
}
}
<强> Ideone Demo 强>