使用正则表达式查找单词中的唯一字符
Finding unique characters in words with RegEx
我想使用 RegEx 来匹配只在该词中出现一次的序列中的字符。因此,例如在 armored armadillo
中,唯一的匹配项是 e
、i
和
.
我的第一次尝试是使用环视来匹配字符,这样在匹配之前或之后都不会出现相同字符的副本:
(.)(?<!^.*)(?!.*$)
但是无论我做什么,这似乎都不匹配任何字符。我究竟做错了什么?如何以我想要的方式匹配字符?
您可以使用
(.)(?<!.+)(?!.*)
正则表达式将一个字符捕获到组 1 中,然后通过两次环视确保前后没有这样的字符。
要匹配包括换行符在内的任何字符,请将 .
替换为 [\s\S]
或在模式前加上 (?s)
内联修饰符((?m)
in Ruby)。
详情
(.)
- 第 1 组:任何单个字符(默认情况下除换行字符外)
(?<!.+)
- 如果第 1 组值后跟一个或多个字符而不是换行字符,则匹配失败的负后视紧接在当前位置的左侧([=此处需要 17=] 以确保 .
匹配至少一个字符,即捕获到组 1) 中的字符
(?!.*)
- 如果有零个或多个字符而不是换行符,则匹配失败的否定前瞻,然后第 1 组值紧接在当前位置的右侧。
我想使用 RegEx 来匹配只在该词中出现一次的序列中的字符。因此,例如在 armored armadillo
中,唯一的匹配项是 e
、i
和
.
我的第一次尝试是使用环视来匹配字符,这样在匹配之前或之后都不会出现相同字符的副本:
(.)(?<!^.*)(?!.*$)
但是无论我做什么,这似乎都不匹配任何字符。我究竟做错了什么?如何以我想要的方式匹配字符?
您可以使用
(.)(?<!.+)(?!.*)
正则表达式将一个字符捕获到组 1 中,然后通过两次环视确保前后没有这样的字符。
要匹配包括换行符在内的任何字符,请将 .
替换为 [\s\S]
或在模式前加上 (?s)
内联修饰符((?m)
in Ruby)。
详情
(.)
- 第 1 组:任何单个字符(默认情况下除换行字符外)(?<!.+)
- 如果第 1 组值后跟一个或多个字符而不是换行字符,则匹配失败的负后视紧接在当前位置的左侧([=此处需要 17=] 以确保.
匹配至少一个字符,即捕获到组 1) 中的字符
(?!.*)
- 如果有零个或多个字符而不是换行符,则匹配失败的否定前瞻,然后第 1 组值紧接在当前位置的右侧。