匹配没有任何 2 个连续重复字符的字符串的正则表达式模式
Regular expression pattern to match string without any 2 consecutive repeated characters
我可以非常轻松地编写正则表达式来匹配包含 2 个连续重复字符的字符串:
/(\w)/
我该怎么做补码?我想匹配没有 2 个连续重复字符的字符串。我尝试了以下变体但没有成功:
/(\w)[^]/ ;doesn't work as hoped
/(?!(\w))/ ;looks ahead, but some portion of the string will match
/(\w)(?!)/ ;again, some portion of the string will match
我不想要任何 language/platform 特定的方法来取正则表达式的否定。我想要直接的方法来做到这一点。
下面的正则表达式将匹配没有任何重复字符的字符串。
^(?!.*(\w)).*
(?!.*(\w))
否定前瞻断言要匹配的字符串将不包含任何重复字符。 .*(\w)
将匹配中间或开头或结尾有重复字符的字符串。 ^(?!.*(\w))
匹配除重复字符以外的所有起始边界。并且以下 .*
匹配该特定行上存在的所有字符。请注意,这也匹配空字符串。如果您不想匹配空行,请将最后的 .*
更改为 .+
请注意 ^(?!(\w))
仅检查字符串或行开头的重复字符。
向前看和向后看,统称为"lookaround",是零长度断言,就像行的开始和结束一样。它们不消耗字符串中的字符,而仅断言匹配是否可能。 Lookaround 允许您创建没有它们就无法创建的正则表达式,或者没有它们会变得非常冗长。
我可以非常轻松地编写正则表达式来匹配包含 2 个连续重复字符的字符串:
/(\w)/
我该怎么做补码?我想匹配没有 2 个连续重复字符的字符串。我尝试了以下变体但没有成功:
/(\w)[^]/ ;doesn't work as hoped
/(?!(\w))/ ;looks ahead, but some portion of the string will match
/(\w)(?!)/ ;again, some portion of the string will match
我不想要任何 language/platform 特定的方法来取正则表达式的否定。我想要直接的方法来做到这一点。
下面的正则表达式将匹配没有任何重复字符的字符串。
^(?!.*(\w)).*
(?!.*(\w))
否定前瞻断言要匹配的字符串将不包含任何重复字符。 .*(\w)
将匹配中间或开头或结尾有重复字符的字符串。 ^(?!.*(\w))
匹配除重复字符以外的所有起始边界。并且以下 .*
匹配该特定行上存在的所有字符。请注意,这也匹配空字符串。如果您不想匹配空行,请将最后的 .*
更改为 .+
请注意 ^(?!(\w))
仅检查字符串或行开头的重复字符。
向前看和向后看,统称为"lookaround",是零长度断言,就像行的开始和结束一样。它们不消耗字符串中的字符,而仅断言匹配是否可能。 Lookaround 允许您创建没有它们就无法创建的正则表达式,或者没有它们会变得非常冗长。