我使用的是标准的\b
字边界。但是,它并不像我想要的那样处理点(。)字符。
以下正则表达式:
\b(\w+)\b
cats
,将与dogs
中的cats.dog
和cats and dogs don't make cats.dogs
匹配。
我需要一个单词边界替代方案,只有在以下情况下才匹配整个单词:
有什么想法吗?!
P.S。我需要这个用于PHP
答案 0 :(得分:6)
您可以尝试使用(?<=\s)
之前和(?=\s)
代替\b
以确保其前后有空格,但您可能还想允许使用(?<=\s|^)
和(?=\s|$)
这会自动排除其中包含.
的“字词”,但它也会在句子末尾排除一个字,因为它与句号之间没有空格。
答案 1 :(得分:2)
您尝试匹配的内容可以通过数组和字符串函数轻松完成。
$parts = explode(' ', $str);
$res = array_filter($parts, function($e){
return $e!=="" && strpos($e,".")===false;
});
我推荐这种方法为节省时间。 否则浪费几个小时来找到一个好的正则表达式解决方案是非常没有效率的。