正则表达式匹配与第一个不同的字符

Mhm*_*hmd 0 ruby regex pattern-matching

我试图使用正则表达式来匹配这样的模式:

(任何字母)(另一封信)(同一封信再次)

例如:

这些都是有效的例子:

aba
bcb
dbd
Run Code Online (Sandbox Code Playgroud)

这些都无效:

aab
aaa
bac
Run Code Online (Sandbox Code Playgroud)

我试图这样做:

(.)[^\1]\1
Run Code Online (Sandbox Code Playgroud)

但是,这仍然符合第二个字母与第一个字母相似的情况(例如:) aaa.见这里:http://rubular.com/r/TTGEcyhE9g

正则表达式中是否有匹配的方法any letter except the captured one

Hol*_*ust 5

反向引用在字符范围内无效.如下面的WiktorStribiżew所述,您在这里定义原始字符,在您的情况下是\x01(SOH,标题开头)字符.

作为一种解决方法,您可以使用负面预测,如下所示:

(.)(?!\1).\1
Run Code Online (Sandbox Code Playgroud)

在这里,您匹配任何未跟随相同字符(未被消费)的字符,后跟任何字符(但由于负前瞻而使用不同的字符),然后再次跟随第一个字符.

您可以在Ruby文档中了解有关lookahead和lookbehind的更多信息.

  • 您可以添加`[^\1]`匹配除`\ x01` char之外的任何字符(*SOH,标题*开头).要使`.`匹配任何char,添加`m`修饰符. (2认同)