正则表达式 - 匹配所有单词但仅匹配唯一单词一次

时间:2012-12-27 21:10:40

标签: regex

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

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

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

和以下字符串:

glass shoes door window door glasses. window glasses

在大多数情况下,表达式起作用并匹配以下单词:

shoes
door 
window
glasses

这有两个问题:

  1. 正在使用“glass”在“眼镜”上进行子串的匹配, 这是不正确的。

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

  3. 最后一场比赛应该是:

    shoes 
    door 
    window 
    glasses 
    glass 
    

3 个答案:

答案 0 :(得分:8)

非常接近,只需阅读否定前瞻中的\b

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

Rubular

上查看

答案 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)