正则表达式搜索:带有开放结尾的单词

时间:2016-04-28 04:53:46

标签: php regex search

我有一个像这样的值的数组:

$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

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