正则表达式以匹配捕获组中的前一个或后一个字母字符

Jor*_*son 4 ruby regex

比如说我有以下数据:

ab
cd
ef
zy
ba
cd
Run Code Online (Sandbox Code Playgroud)

我希望能够以匹配第一个字符的方式匹配它,然后根据第一个字符的捕获组匹配第二个字符.

上例中的每一行都应该匹配,而类似ccaf不应该匹配.

详细说明,我的想法看起来像这样:

(基于ruby的正则表达式)

/^(?<first>[a-z])\g<first>$/
Run Code Online (Sandbox Code Playgroud)

然而,这匹配aaac两者都无效,以及预期ab.

有没有办法修改捕获组,或用类似于我想要的语法包围它?

zx8*_*x81 5

正则表达式中没有字符算术.你将不得不走很长的路,并表达你的比赛作为一个长期的交替:

ab|ba|bc|cb|....
Run Code Online (Sandbox Code Playgroud)

您可以轻松优化它:

ab|b[ac]|c[bd]...y[xz]|zy
Run Code Online (Sandbox Code Playgroud)

不要费心编写代码来生成它:编写整个字符串应该需要两分钟.(当然,除非是@NeilSlater或@ AmalMurali,否则请参阅评论.)

看,我已经在

ab|b[ac]|c[bd]|d[ce]|e[df]|f[eg]|g[fh]|h[gi]|i[hj]...y[xz]|zy
Run Code Online (Sandbox Code Playgroud)

你完成了.

  • ...但是对于记录:`Regexp.union(('a'..'z').each_cons(2).flat_map {| a,b | ["#{a}#{b}","#{b} #{a}"]})`大致在同一时间完成:-)(但我认为你的答案更优越,因为它更容易看到它在做什么!) (5认同)