是否可以使用正则表达式匹配所有单词但只匹配一次唯一单词? 我知道还有其他方法可以做到这一点,但是我很想知道使用正则表达式是否可行。
例如,我目前有以下表达式:
(\w+\b)(?!.*\1)
和以下字符串:
glass shoes door window door glasses. window glasses
在大多数情况下,表达式起作用并匹配以下单词:
shoes
door
window
glasses
这有两个问题:
正在使用“glass”在“眼镜”上进行子串的匹配, 这是不正确的。
“眼镜”和“眼镜”。应该匹配,但目前不匹配。
最后一场比赛应该是:
shoes
door
window
glasses
glass
答案 0 :(得分:8)
答案 1 :(得分:2)
正好为maček's answer,但在反向引用之前有一个额外的\ b,否则如果你有
glass shoes door window door glasses. window glasses sunglasses
你错过了一场眼镜比赛,因为它在太阳镜这个词中找到了。
/(\w+\b)(?!.*\b\1\b)/
答案 2 :(得分:0)
要搜索多行文本中的不同单词,请使用[\s\S]
代替.
(\b\w+\b)(?![\s\S]*\b\1\b)