【发布时间】:2011-01-14 11:02:47
【问题描述】:
我使用带有 PREG_OFFSET_CAPTURE 标志的匹配可选参数。 我得到了起始偏移量和匹配的表达式.... 我没有找到像 Java 正则表达式那样结束匹配表达式的选项。 有没有解决办法或者我最后的办法是:offset + strlen(matching_string)?
【问题讨论】:
我使用带有 PREG_OFFSET_CAPTURE 标志的匹配可选参数。 我得到了起始偏移量和匹配的表达式.... 我没有找到像 Java 正则表达式那样结束匹配表达式的选项。 有没有解决办法或者我最后的办法是:offset + strlen(matching_string)?
【问题讨论】:
只需在您的正则表达式末尾添加一个(.) 并获取捕获的偏移量;)
【讨论】:
(?<=.)
(.|$)。就像你一直做的那样;)
() 将是最普遍的选择。
您可以匹配\G - 这是上一次匹配后正则表达式引擎的位置。
但是,我认为这比您的“最后手段”方法更好。这有什么不好?
【讨论】:
如果 PHP 与 Perl 类似,那么所有匹配项都应该有几个偏移量数组。
在 Perl 中,它的 @- 和 @+ .. 索引 1 .. 是捕获组偏移量。索引 0 是总匹配偏移量。
if ('012345678' =~ /4/ ) {
print "Match start = $-[0], match end = $+[0]\n";
}
打印Match start = 4, match end = 5
【讨论】:
我有类似的问题,但我无法使用
strlen(matching_string)
因为匹配字符串是一个带有可变数量字符的正则表达式。
我使用 preg_replace 匹配的字符串并从那里开始工作。
我猜它类似于@NikiC 的建议,但我花了一段时间才弄清楚。
希望这会有所帮助。
【讨论】: