【问题标题】:How to get the end position of a regex (PCRE) in PHP?如何在 PHP 中获取正则表达式(PCRE)的结束位置?
【发布时间】:2011-01-14 11:02:47
【问题描述】:

我使用带有 PREG_OFFSET_CAPTURE 标志的匹配可选参数。 我得到了起始偏移量和匹配的表达式.... 我没有找到像 Java 正则表达式那样结束匹配表达式的选项。 有没有解决办法或者我最后的办法是:offset + strlen(matching_string)?

【问题讨论】:

    标签: php regex pcre


    【解决方案1】:

    只需在您的正则表达式末尾添加一个(.) 并获取捕获的偏移量;)

    【讨论】:

    • 聪明但如果后面没有数据怎么办?好像不行。
    • @millebii 使用后视:(?<=.)
    • @millebi:如果可能是结束,你可以使用(.|$)。就像你一直做的那样;)
    • @millebii:空匹配 () 将是最普遍的选择。
    【解决方案2】:

    您可以匹配\G - 这是上一次匹配后正则表达式引擎的位置。

    但是,我认为这比您的“最后手段”方法更好。这有什么不好?

    【讨论】:

    • 以前从未使用过 \G。你的意思是 (\G) 会返回位置还是你的意思是 reg1\Greg2 会让 reg2 在 reg1 之后匹配。需要看文档。嗯,它只是在 Java 中你得到了结束和开始,所以我一直在寻找相同的功能。
    • 在那里找到了一些信息regular-expressions.info/continue.html... 它适用于 PHP preg_match 吗?需要尝试一下。
    【解决方案3】:

    如果 PHP 与 Perl 类似,那么所有匹配项都应该有几个偏移量数组。

    在 Perl 中,它的 @- 和 @+ .. 索引 1 .. 是捕获组偏移量。索引 0 是总匹配偏移量。

    if ('012345678' =~ /4/ ) {
        print "Match start = $-[0], match end = $+[0]\n";
    }
    

    打印Match start = 4, match end = 5

    【讨论】:

    • 是的,这就是重点,但它们无法访问。你并没有真正回答问题。
    【解决方案4】:

    我有类似的问题,但我无法使用

     strlen(matching_string)
    

    因为匹配字符串是一个带有可变数量字符的正则表达式。

    我使用 preg_replace 匹配的字符串并从那里开始工作。

    我猜它类似于@NikiC 的建议,但我花了一段时间才弄清楚。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-08-02
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多