当前位置: 首页 > 知识库问答 >
问题:

正则表达式,用于匹配具有唯一(非重复)字符的单词

华烈
2023-03-14

我正在寻找一个正则表达式,将匹配一个单词,只有当它的所有字符都是唯一的,意思是,单词中的每个字符只出现一次。

示例:
abcdefg-

共有3个答案

邢承弼
2023-03-14

此外,它还可以完全匹配包含不重复字母的任意长度的单词:

^(?!.*(.).*\1)[a-z]+$

我稍微修改了一下前一阵子@波西米亚人对另一个问题提供的答案,得到了这个。

自从提出上面的问题以来,也已经有一段时间了,但我认为在这里也有这个正则表达式模式会很好。

鲁羽
2023-03-14

您可以检查字符串中是否有两个字符实例:

^.*(.).*\1.*$

(我只是简单地捕捉其中一个字符,并检查它是否在其他地方有一个副本,并带有反向引用。<代码>的其余部分。*是无关紧要的)。

如果上面的正则表达式匹配,则字符串具有重复字符。如果上面的正则表达式不匹配,则所有字符都是唯一的。

上面的正则表达式的好处是当正则表达式引擎不支持环顾四周时。

显然吴宇森的解决方案是一个直接检查唯一性的好方法。它在每个字符处断言前面的字符串不包含当前字符。

秦凯旋
2023-03-14

试试这个,它可能会工作,

^(?:([A-Za-z])(?!.*\1))*$

解释说明

Assert position at the beginning of a line (at beginning of the string or after a line break character) «^»
Match the regular expression below «(?:([A-Z])(?!.*\1))*»
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
   Match the regular expression below and capture its match into backreference number 1 «([A-Z])»
      Match a single character in the range between “A” and “Z” «[A-Z]»
   Assert that it is impossible to match the regex below starting at this position (negative lookahead) «(?!.*\1)»
      Match any single character that is not a line break character «.*»
         Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
      Match the same text as most recently matched by capturing group number 1 «\1»
Assert position at the end of a line (at the end of the string or before a line break character) «$»
 类似资料:
  • 问题内容: 我正在尝试创建一个匹配字符串的正则表达式,如果它连续有3个或多个重复字符(例如aaaaaa,testtttttt,otttttter)。 我尝试了以下方法: 连续 匹配 任意 3个字符,但不 连续的 字符…我在哪里出错? 问题答案: 您要的内容无法使用 真正的 正则表达式完成,您需要的是(不规则的)反向引用。尽管许多正则表达式引擎实现了它们,但Go使用的RE2却没有。RE2是一种快速的

  • 问题内容: 在正则表达式中匹配非ASCII字符的最简单方法是什么?我想在输入字符串中单独匹配所有单词,但是语言可能不是英语,因此我需要匹配ü,ö,ß和ñ。另外,这是在Javascript/ jQuery中,因此任何解决方案都需要适用于此。 问题答案: 应该这样做: 它匹配ASCII字符集(0-127,即0x0至0x7F)中不包含的任何字符。 您可以使用Unicode执行相同的操作: 对于unico

  • 我的正则表达式是 当我在java中使用Pattern.complie()编译时,我得到了*非法重复字符* 我测试了这个正则表达式 当我编译这个时,它没有显示错误。 为什么会发生这种情况?

  • 除非x后面跟了另一个x,否则我怎样才能在右边匹配任意数量的空白呢? 到目前为止,我有: 但显然,即使文本是“xx”,这仍然会捕获。我如何让这个捕获“xaldkfjda”、“x”、“x adkf”等,但不是“xxaldkfjdlk”、“xx”等中的第一个x? 编辑:最后一句的结尾应该是“…但不是前两个x在:‘xxaldkfjdlk’,‘xx’等?”简而言之,我想抓住一个“x”,但从来没有两个“x”并

  • 问题内容: 我需要匹配重复两次的任何字符,例如: 应匹配“ cc”和“ ff”。在任何其他正则表达式语法中,让我们使用Javascript作为快速示例,我可以这样做: 哪个返回 但是Go的regexp似乎不允许这样做。可以在Go中执行此操作吗? 问题答案: 由于re2不支持向后引用,因此您需要: 要么使用另一个正则表达式库(如) 或编写一个无需进行正则表达式分析的循环