7

我使用的是标准\b单词边界。但是,它并不能完全按照我想要的方式处理点 (.) 字符。

所以下面的正则表达式:

\b(\w+)\b

如果我cats有一个字符串表示dogs.cats.dogcats and dogs don't make cats.dogs

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

  1. 它不包含点 (.) 字符
  2. 它由每侧至少一个空格()字符封装

有任何想法吗?!

PS我需要这个用于PHP

4

2 回答 2

6

您可以尝试使用(?<=\s)before 和(?=\s)after 代替 the\b以确保它之前和之后有一个空格,但是您可能还希望允许在字符串的开头或结尾处使用(?<=\s|^)and(?=\s|$)

这将自动排除其中带有 a 的“单词” .,但它也会排除句子末尾的单词,因为它和句号之间没有空格。

于 2012-12-28T18:57:39.410 回答
2

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

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

我推荐这种方法,因为它可以节省时间否则浪费几个小时来寻找一个好的正则表达式解决方案是非常低效的

于 2012-12-28T19:09:03.297 回答