|
|
1
3
用声明正则表达式
qr
不是简单的字符串。另外,你要捕捉两次,一次
|
|
|
2
2
当我把这个字符串编译成regex时,就像这样:
我得到了我认为我应该得到的,以下regex:
注意它正在寻找一个 俘获群 而不是“open”结尾处的开场白。在这个捕获组中,它期望的第一件事是一个单引号。所以它会匹配
但不是
你必须学习的一件事是,在Perl中,
实际上保留了文字
这就是我认为你想要的。 至于你的问题,你应该 测试 使用前匹配的结果。
更有意义。如果你无论如何都想看到它,那么它已经隐含在一个想法中,那就是它可能没有一个值。也就是说,你可能没有匹配任何东西。在这种情况下,最好把替代品
但是,我更喜欢在同一个语句中抓取我的捕获,比如:
周围的帕伦斯
最后,问题的一个根本原因是,您不需要在字符串中指定表达式,以便您的regex“可移植”。您可以让Perl预编译表达式。这样,您只关心字符对regex的指令是什么,而不关心是否 节约 直到它编译成表达式为止。 已编译的regex会正确地将自己插入到其他regex中。因此,您可以得到一个可移植的表达式,它既可以插入字符串,也可以正确地处理字符串中可能丢失的指令。
是你所需要的。然后你可以使用它,就像你那样。尽管,将parens放在整个事物周围,会返回整个匹配的表达式(而不仅仅是引号之间的表达式)。 |
|
|
3
1
匹配模式中不需要括号。它将匹配整个模式并返回
或
这些是 clustering, non-capturing parentheses . 你的做法是正确的。 |
|
|
4
1
已经给出了解决方案,我想指出
函数名和圆括号之间可能有空格,因此我将使用稍微不同的regex:
现在所有参数都在
|
|
|
5
0
它报告一个未初始化的值,因为$1未定义。$1是未定义的,因为您已经通过在模式周围包装第二组括号创建了嵌套的匹配组。如果没有与您的模式匹配的内容,那么它也将是未定义的。 |
|
|
DotFX · RegEx捕获关键字前但括号后的所有内容 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |
|
|
iato · 确保正则表达式不从命名材料中的数字中提取 1 年前 |
|
|
vr8ce · 非成对标记中特定字符的正则表达式 1 年前 |
|
|
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 1 年前 |
|
|
Carsten · 使用最近的搜索模式更改文本块 1 年前 |