正则表达式重复:如何匹配变量长度的表达式?

Ste*_* P. 3 perl

从本质上讲,这就是我想要做的事情:

if ($expression =~ /^\d{num}\w{num}$/)
{
     #doSomething
}
Run Code Online (Sandbox Code Playgroud)

where num不是标识符,但可以表示任何大于0的整数(\d并且\w是任意选择的).我想匹配一个字符串,如果它包含两组相关字符,一组紧接着另一组,并且每组中的字符数相同.

在这个例子中,123abc021202abcdef会匹配,但43abc不会,亦不会12ab3c1234acbcde.

Jon*_*rdy 6

不要认为字符串从左到右增长,而是从外部增长:

xy
x(xy)y
xx(xy)yy
Run Code Online (Sandbox Code Playgroud)

你的正则表达式将是这样的:

/^(x(?1)?y)$/
Run Code Online (Sandbox Code Playgroud)

(?1)一个是对外括号的引用.?使它成为可选的,以便为递归匹配提供各种"基本情况".这可能是正则表达式如何用于匹配无上下文语法的最简单的例子-尽管使用解析器生成器或解析器组合器库通常更容易.