11

是否可以使用正则表达式匹配所有单词但只匹配唯一单词一次?我知道还有其他方法可以做到这一点,但是我很想知道使用正则表达式是否可以做到这一点。

例如,我目前有以下表达式:

(\w+\b)(?!.*\1)

和以下字符串:

glass shoes door window door glasses. window glasses

在大多数情况下,该表达式有效并匹配以下单词:

shoes
door 
window
glasses

这有两个问题:

  1. 正在用“glass”在“glasses”上匹配子字符串,这是不正确的。

  2. “眼镜”和“眼镜”。应该匹配,但目前不匹配。

最后的比赛应该是:

shoes 
door 
window 
glasses 
glass 
4

3 回答 3

10

非常接近,刚刚阅读\b了负面的前瞻

/(\w+\b)(?!.*\1\b)/

Rubular上查看

于 2012-12-27T21:27:18.453 回答
3

对于在多行文本中搜索不同的单词,使用[\s\S]而不是.

(\b\w+\b)(?![\s\S]*\b\1\b)
于 2018-10-17T08:58:19.523 回答
2

maček 的答案完全相同,但在反向引用之前有一个额外的 \b ,否则如果你有

glass shoes door window door glasses. window glasses sunglasses

你会错过眼镜的匹配,因为它在太阳镜这个词中找到。

/(\w+\b)(?!.*\b\1\b)/

于 2015-04-22T11:15:19.863 回答