我要求在一个序列中匹配12个数字,但我被限制在第9个数字。有没有办法超越9场比赛?
我的字符串就像
{"Column5": "Null", "Column4": "Null", "Column6": "Null", "Column1": "END", "Column3": "Null", "Column2": "Null"}
其中列是固定的,但代替Null,可以有任何序列/字符。
我尝试匹配列和后续字符串,但我有12个匹配,而我只限9美元。
有什么建议吗?
答案 0 :(得分:2)
您可以轻松地将匹配项放入实际数组中,而不是依赖于$1
和朋友:
my @matches = $some_string =~ /(some) (regex) with (m)(a)(n)(y) (c)(a)(p)(t)(u)r(e)(s)/;
或者,如评论中所建议的,如果您正在解析JSON数据,请使用JSON解析器。它比基于正则表达式的快速解决方案更可靠。
答案 1 :(得分:1)
请使用Dave Sherohman's suggestion关于使用JSON解析器,或者至少使用实际数组来存储匹配项。
Perl对捕获的数量没有严格的限制(或者限制是如此之高,以至于没有合理的脚本会遇到)。 The code in this answer和even the script in the question表示您可以照常捕获超过9的群组中的匹配文字,即第10组$10
,第100组$100
。
(如果有人感到困惑,$1
,$10
,...是在正则表达式之外使用的变量来引用捕获组的内容。它是&#39 ; s不是反向引用的语法(例如\1
,\10
,...或\g{1}
,\g{10}
,...),它们在正则表达式中用于匹配捕获组捕获的相同文本。)