基本上,这就是我想要做的:
if ($expression =~ /^\d{num}\w{num}$/)
{
#doSomething
}
其中 num
不是标识符,但可以代表任何大于 0 的整数(\d
和 \w
是任意选择的) .我想匹配一个字符串,如果它包含两组相关字符,一组紧随其后,并且每组中的字符数相同。
对于此示例,123abc
和 021202abcdef
会匹配,但 43abc
不会匹配,12ab3c
或1234acbcde
。
最佳答案
不要认为字符串是从左到右增长的,而是从外向内增长:
xy
x(xy)y
xx(xy)yy
您的正则表达式将类似于:
/^(x(?1)?y)$/
(?1)
是对外圆括号的引用。 ?
使其成为可选的,以便为递归匹配提供某种“基本情况”。这可能是如何使用正则表达式匹配 context-free grammars 的最简单示例。 ——尽管使用解析器生成器或解析器组合器库通常更容易正确处理。
关于perl - 正则表达式重复: how to match expressions of variable lengths?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052139/