为什么名称捕获组不能捕获相同的值?

ZP。
^(?'a'1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.(?&a)$

我正在学习正则表达式,并遇到了这个问题,它没有捕获,255.255255.25

我的正则表达式怎么了?

如果我重复使用相同的模式,它将起作用

^(?:1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])\.(?:1?[0-9]?[0-9]|2[0-4][0-9]|25[0-5])$

但是当我尝试使用名称捕获组时它不起作用 (?&a)

卡西米尔和希波吕特

它取决于PCRE版本。PCRE新闻10.30:

新的实现允许回溯到模式中的递归组调用,使其与Perl更兼容,并且还解决了其他一些以前很难做到的问题。

  • 在PCRE v10.30之前:最初,默认情况下,递归组调用是原子的。

    交替的顺序是陷阱,因为第一个成功的替代方案获胜。在您的情况下,如果1?[0-9]?[0-9]匹配项为25(从未测试其他替代方案),则当正则表达式引擎尝试$失败时,该组中就不可能进行回溯。您可以像这样解决写命名捕获的问题:

    (?<a>1[0-9]{0,2}|[3-9][0-9]?|2(?:[0-4][0-9]?|5[0-5]?|[6-9])?|0)
    

    它要更长一些,但是每个数字都遵循一条独特的成功道路:演示

  • 从PCRE 10.30开始:在较新的PCRE版本中,递归组调用不再是原子的(可以在Perl中进行回溯),您的模式也可以这样工作:https : //3v4l.org/HUICY

请注意,实际上,regex101和PHP <7.3使用较旧的PCRE版本,其中递归组调用始终是原子的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我不能捕获OOM异常?

来自分类Dev

为什么`catch`不能捕获这个异常?

来自分类Dev

正则表达式:为什么我不能在花括号 {} 内使用捕获组

来自分类Dev

编辑捕获组值

来自分类Dev

为什么不能在lambda函数中更改通过复制捕获的变量的值?

来自分类Dev

为什么不能在输入字段中捕获值?(JS / HTML)

来自分类Dev

为什么带有捕获组的此正则表达式不能在bash中工作?

来自分类Dev

快速捕获具有相同名称的值

来自分类Dev

为什么我不能正确捕获此异常?

来自分类Dev

为什么我不能多次捕获该异常?

来自分类Dev

为什么数据成员不能在Lambda捕获列表中

来自分类Dev

为什么不能尝试捕获某些异常的工作?

来自分类Dev

使用try:捕获异常时,为什么不能返回?

来自分类Dev

为什么不能在lambda中捕获此按引用('&this')?

来自分类Dev

为什么我不能在变量中捕获FakeItEasy期望?

来自分类Dev

为什么`>`重定向不能捕获替代进程的标准输出?

来自分类Dev

为什么信号不能在 Perl 的模块中捕获

来自分类Dev

为什么我不能捕获从node-postgres抛出的错误?

来自分类Dev

为什么非捕获组未按定义循环?

来自分类Dev

为什么pos()报告即使与非捕获组也匹配?

来自分类Dev

为什么[=] {}捕获了lambda?

来自分类Dev

为什么map和map_err捕获相同的变量?

来自分类Java

为什么多捕获RuntimeException编译但多捕获Exception不能编译?

来自分类Dev

为什么“ except:”能够捕获此错误,但不能捕获“ Exception,e:”除外?

来自分类Dev

为什么有时在ActionBlock中尝试/捕获不能捕获此错误?

来自分类Java

为什么不捕获Exception捕获RuntimeException?

来自分类Dev

如果一个唯一的指针是一个捕获的值,为什么它不能在lambda内移动?

来自分类Dev

为什么我得到了未捕获的类型错误,属性值不能设置为未定义?

来自分类Dev

从两个文件路径之一加载数据的最干净,最pythonic的方法是什么?为什么我不能捕获两个相同的异常?

Related 相关文章

  1. 1

    为什么我不能捕获OOM异常?

  2. 2

    为什么`catch`不能捕获这个异常?

  3. 3

    正则表达式:为什么我不能在花括号 {} 内使用捕获组

  4. 4

    编辑捕获组值

  5. 5

    为什么不能在lambda函数中更改通过复制捕获的变量的值?

  6. 6

    为什么不能在输入字段中捕获值?(JS / HTML)

  7. 7

    为什么带有捕获组的此正则表达式不能在bash中工作?

  8. 8

    快速捕获具有相同名称的值

  9. 9

    为什么我不能正确捕获此异常?

  10. 10

    为什么我不能多次捕获该异常?

  11. 11

    为什么数据成员不能在Lambda捕获列表中

  12. 12

    为什么不能尝试捕获某些异常的工作?

  13. 13

    使用try:捕获异常时,为什么不能返回?

  14. 14

    为什么不能在lambda中捕获此按引用('&this')?

  15. 15

    为什么我不能在变量中捕获FakeItEasy期望?

  16. 16

    为什么`>`重定向不能捕获替代进程的标准输出?

  17. 17

    为什么信号不能在 Perl 的模块中捕获

  18. 18

    为什么我不能捕获从node-postgres抛出的错误?

  19. 19

    为什么非捕获组未按定义循环?

  20. 20

    为什么pos()报告即使与非捕获组也匹配?

  21. 21

    为什么[=] {}捕获了lambda?

  22. 22

    为什么map和map_err捕获相同的变量?

  23. 23

    为什么多捕获RuntimeException编译但多捕获Exception不能编译?

  24. 24

    为什么“ except:”能够捕获此错误,但不能捕获“ Exception,e:”除外?

  25. 25

    为什么有时在ActionBlock中尝试/捕获不能捕获此错误?

  26. 26

    为什么不捕获Exception捕获RuntimeException?

  27. 27

    如果一个唯一的指针是一个捕获的值,为什么它不能在lambda内移动?

  28. 28

    为什么我得到了未捕获的类型错误,属性值不能设置为未定义?

  29. 29

    从两个文件路径之一加载数据的最干净,最pythonic的方法是什么?为什么我不能捕获两个相同的异常?

热门标签

归档