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

Regex 正则表达式-匹配所有单词,但只匹配唯一单词一次,regex,Regex,是否可以使用正则表达式匹配所有单词,但只匹配唯一单词一次我知道还有其他方法可以做到这一点,但是我想知道使用正则表达式是否可以做到这一点。 例如,我当前有以下表达式: (\w+\b)(?!.*\1) 和以下字符串: glass shoes door window door glasses. window glasses 在大多数情况下,该表达式起作用并与以下单词匹配: shoes door window glasses 这有两个问题: 子字符串的匹配正在“glass”和“glass”上进行

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

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

(\w+\b)(?!.*\1)
和以下字符串:

glass shoes door window door glasses. window glasses
在大多数情况下,该表达式起作用并与以下单词匹配:

shoes
door 
window
glasses
这有两个问题:

  • 子字符串的匹配正在“glass”和“glass”上进行, 这是不正确的

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

  • 决赛应为:

    shoes 
    door 
    window 
    glasses 
    glass 
    

    非常接近,只需在负前瞻中读取
    \b

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

    上查看它时,完全相同,但在back引用之前有一个额外的\b,否则如果您有

    玻璃鞋门窗玻璃。窗玻璃太阳镜

    你会错过一个匹配的眼镜,因为它发现它在字太阳镜


    /(\w+\b)(?!.\b\1\b)/
    要在多行文本中搜索不同的单词,请使用
    [\s\s]
    而不是

    (\b\w+\b)(?![\s\S]*\b\1\b)
    

    我想知道为什么
    \1
    显然与第一组的
    \b
    不匹配。不应该
    \1
    匹配组内的所有内容,而不仅仅是
    \w+
    ?@maček哇!非常感谢你,我已经花了两天的时间试图弄明白这一点@PeterStahl您必须添加
    \b
    的原因是为了确保负前瞻匹配整个单词,而不仅仅是子字符串,默认情况下它匹配子字符串。请注意:
    \b
    是根据
    \w
    中定义的单词字符的单词边界,因此,在
    apple\u apple
    @pemisthal中,
    \ucode>周围将没有单词边界:
    \1
    匹配在第1个表达式中找到的任何字符,但不匹配断言。您还应该在
    \w
    之前添加一个
    \b
    ,以避免因
    太阳镜
    而失败。正确答案是。其他答案并不能解释整句话。