我正在尝试使用正则表达式来匹配这样的模式:
(任何字母)(不同的字母)(再次相同的字母)
例如:
这些都是有效的示例:
aba
bcb
dbd
这些无效:
aab
aaa
bac
我正试图通过这种方式做到这一点:
(.)[^\1]\1
但是,这仍然匹配第二个字母与第一个字母相似的情况(例如:aaa
)。看到这里:http://rubular.com/r/TTGEcyhE9g
正则表达式中是否可以匹配any letter except the captured one
?
答案 0 :(得分:5)
后向引用在字符范围内无效。如下面的WiktorStribiżew所述,您在此处定义原始字符,在这种情况下,您将定义\x01
(SOH,标题开始)字符。
作为解决方法,您可以按如下方式使用否定前瞻:
(.)(?!\1).\1
在这里,您要匹配的是没有跟相同字符(不消耗)的任何字符,再跟有任何字符(由于负前瞻而不同的字符),再匹配第一个字符。
您可以在Ruby documentation中了解有关先行和后行的更多信息。
答案 1 :(得分:1)
如果您喜欢使用正则表达式,则可以满足Wiktor的建议。但是,编写执行这些断言的基本Ruby脚本很容易:
input = "aea hello"
if input[0] == input[2] && input[0] != input[1]
print "match"
else
print "no match"
end