正则表达式单词边界替代

时间:2012-12-28 18:53:31

标签: php regex word-boundary

我使用的是标准的\b字边界。但是,它并不像我想要的那样处理点(。)字符。

以下正则表达式:

\b(\w+)\b

如果我的字符串显示为cats

将与dogs中的cats.dogcats and dogs don't make cats.dogs匹配。

我需要一个单词边界替代方案,只有在以下情况下才匹配整个单词:

  1. 它不包含点(。)字符
  2. 它由每边至少一个space()字符封装
  3. 有什么想法吗?!

    P.S。我需要这个用于PHP

2 个答案:

答案 0 :(得分:6)

您可以尝试使用(?<=\s)之前和(?=\s)代替\b以确保其前后有空格,但您可能还想允许使用(?<=\s|^)(?=\s|$)

进入字符串开头或结尾的可能性

这会自动排除其中包含.的“字词”,但它也会在句子末尾排除一个字,因为它与句号之间没有空格。

答案 1 :(得分:2)

您尝试匹配的内容可以通过数组和字符串函数轻松完成。

$parts = explode(' ', $str);
$res = array_filter($parts, function($e){
   return $e!=="" && strpos($e,".")===false;
});

我推荐这种方法为节省时间否则浪费几个小时来找到一个好的正则表达式解决方案是非常没有效率的