perl - 正则表达式重复: how to match expressions of variable lengths?

标签 perl

基本上,这就是我想要做的:

if ($expression =~ /^\d{num}\w{num}$/)
{
     #doSomething
}

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

对于此示例,123abc021202abcdef 会匹配,但 43abc 不会匹配,12ab3c1234acbcde

最佳答案

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

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/

相关文章:

windows - 为什么我在 Windows 上使用 Perl-Tk 构建复杂的 GUI 时遇到问题?

perl - 我怎样才能用 Perl 的能力给人们留下深刻印象?

perl - 如何从 PDL 矩阵中提取特定行?

perl - 安装缺少的 Perl 模块的最简单方法是什么?

perl - 二进制sed替换

perl - 什么文本编辑器能最准确地突出 Perl 的语法

file - Perl - 在制表符分隔的文本文件中拆分列并用新值替换列的问题

perl - 哈希引用数组 : How to access based on hashref "column" values

perl - 如何使用 perl 转换 base64 编码的文件?

mysql - 在 Perl 中安装 DBD::mysql 时出现问题