Fri*_*nsh 5 regex google-analytics
我想匹配一个数字等于或高于捕获组中的数字的字符串.
例:
1x1
=匹配1x2
=匹配2x1
=不匹配在我看来,正则表达式看起来像这样,(\d)x[\1-9]
但这不起作用.是否有可能使用正则表达式来实现这一目标?
正如您所发现的,您无法在正则表达式中插入值,因为:
因为字符类是在编译正则表达式时确定的...唯一的字符类正则表达式节点类型是“硬编码字符列表”,它是在编译正则表达式时构建的(而不是在它运行一部分并弄清楚 $1 可能是什么之后)最终成为)。
[来源]
由于字符类不允许反向引用,因此反斜杠后跟数字在字符类中被重新利用:
反斜杠后跟两个或三个八进制数字被视为八进制数。
[来源]
这显然不是你想要的[\1-9]
。但由于在所有字符都已知之前无法编译字符类,因此我们必须找到另一种方法。
如果我们希望完全在正则表达式中完成此操作,我们无法枚举所有可能的组合,因为我们必须检查所有捕获以找出匹配的组合。例如:
"1x2" =~ m/(?:(0)x(\d)|(1)x([1-9])|(2)x([2-9])|(3)x([3-9])|(4)x([4-9])|(5)x([5-9])|(6)x([6-9])|(7)x([7-9])|(8)x([89])|(9)x(9))/
Run Code Online (Sandbox Code Playgroud)
将包含“1” in$3
和“2” in $4
,但您必须搜索捕获 1 到 20 以查找每次是否有匹配的内容。
对正则表达式结果进行后处理的唯一方法是使用正则表达式条件:(?(A)X)
其中A
是条件,X
是结果操作。
遗憾的是 RE2 不支持条件,但我们将继续努力证明它是可以做到的。
您想要使用的是X
((*F)
或(?!)
在 Ruby 2+ 中)强制失败:http://www.rexegg.com/regex-tricks.html#fail
您想要使用的是A
,?{$1 > $2}
但只有 Perl 允许您直接在正则表达式中使用代码。Perl 允许您使用:
m/(\d)x(\d)(?(?{$1 > $2})(?!))/
Run Code Online (Sandbox Code Playgroud)
[实例]
所以你的问题的答案是:“不,你不能用 Google Analytics 使用的 RE2 来做到这一点,但是你可以用 Perl 正则表达式来做到这一点。”
归档时间: |
|
查看次数: |
295 次 |
最近记录: |