正则表达式:如何匹配除了这些单词之外的这些单词?

时间:2017-01-22 12:59:15

标签: php regex regex-negation

我希望匹配正则表达式中的一些单词,除了其他一些单词:

ex:所有包含straat,laan,baan的单词

(straat|laan|baan)

但不是

(overslaan|bestraat|rubaan)

ex:mystraat bolaan overslaan boobaan rubaan

应匹配

mystraat bolaan boobaan

2 个答案:

答案 0 :(得分:1)

这有点复杂,但可以用负面的观察来完成。

尝试这样的事情:

$goodString = "coolbaan";
$badString = "rubaan";

$stringToTest = $goodString;

$regexPattern = '/(.*?)((?<!overs|ru|be)(straat|laan|baan))/';

preg_match($regexPattern, $stringToTest, $matches);
if ($matches) {
  // $matches[1] will be the prefix - e.g. ru
  // $matches[2] will be the suffix e.g. baan
  // $result will be 'rubaan'
  $result = "{$matches[1]}{$matches[2]}";
} else {
  $result = 'No Match!';
}
echo $result;

答案 1 :(得分:-2)

只需在正则表达式前添加^,然后在$下面结束检查代码:

/^[straat|laan|baan]$/