有没有办法构建一个可以按如下方式工作的正则表达式:
将整数与组
1
匹配,然后匹配\1
整数。
(\d+)(\s+\d+){\1}
这个{{1}}是不允许的,但我发现它很好地描述了我想要实现的目标。
答案 0 :(得分:2)
你可以做这样的事情
var numbers = "3 7 6 5 4 3 2 1"; // list of numbers
var iter = numbers.split(" ")[0] // get first number
numbers = numbers.substr(iter.length+1) // chop off first number, and the space that follows it you can comment
var rex = new RegExp("(?:\\d(?: |$)){" + iter + "}","") // create regex
alert((numbers.match(rex)||[]).join("\n")) // a sample alert that joins the array to a string with an element on each line
或者,如果您想要第一个数字来定义同一个数组中出现的次数,那么可以进行一些更改
var numbers = "3 7 6 5 4 3 2 1"; // list of numbers
var iter = numbers.split(" ")[0] // get first number
var rex = new RegExp("(?:\\d(?: |$)){" + (+iter+1) + "}","") // create regex
alert((numbers.match(rex)||[]).join("\n")) // a sample alert that joins the array to a string with an element on each line
答案 1 :(得分:0)
感谢@Kobi提出使用代码标注的建议。确实有可能使用最后一个反向引用来建立动态长度匹配。代码看起来像这样:
$s = '3 4 5 6 7 8 9 10';
$s =~ /(\d+)\s+((??{"(\\s*\\d+){$^N}"}))/;
print "$1\n$2\n"
打印
3
4 5 6