只有perl 1到9美元,我们可以走得更远吗?

时间:2015-02-10 07:42:08

标签: regex perl

我要求在一个序列中匹配12个数字,但我被限制在第9个数字。有没有办法超越9场比赛?

我的字符串就像

{"Column5": "Null", "Column4": "Null", "Column6": "Null", "Column1": "END", "Column3": "Null", "Column2": "Null"}

其中列是固定的,但代替Null,可以有任何序列/字符。

我尝试匹配列和后续字符串,但我有12个匹配,而我只限9美元。

有什么建议吗?

2 个答案:

答案 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 answereven the script in the question表示您可以照常捕获超过9的群组中的匹配文字,即第10组$10,第100组$100

(如果有人感到困惑,$1$10,...是在正则表达式之外使用的变量来引用捕获组的内容。它是&#39 ; s不是反向引用的语法(例如\1\10,...或\g{1}\g{10},...),它们在正则表达式中用于匹配捕获组捕获的相同文本。)