我有这个正则表达式:
(?=(([a-z]{1})([a-z]{1})\2))
通过它,我试图获取所有回文字符串。因此,如果这是我的字符串:
mnonopooo
我的正则表达式确实选择了字符串中的所有回文字符串,但是它也选择了ooo
,我知道原因,这是因为正则表达式的这一中心部分:
(?=(([a-z]{1}) "([a-z]{1})" \2))
这部分应该像这样,匹配除反向引用组\2
之外的所有内容。
所以我尝试了类似的方法,但是没有用:
(?=(([a-z]{1}) (?!\2) \2))
所以基本上,我的正则表达式包含三个部分:
因此,第二部分我无法完成。 有人可以帮忙吗
答案 0 :(得分:2)
只需添加否定的Lookahead(即(?!\2)
),以确保不会重复第一个匹配的字母,并保持第3个组不变(您仍然需要):
(?=(([a-z])(?!\2)([a-z])\2))
请注意,{1}
的使用是多余的,因此我将其删除。