所以我知道如果你传入PREG_OFFSET_CAPTURE标志,你会得到原始“haystack”中正则表达式匹配的索引,但是如果我想在整个匹配中得到匹配的索引呢?
简单示例:
原始字符串:"Have a <1 + 2> day today"
我的正则表达式/<1 ([+|-]) 2>/
所以在示例中我匹配1和2之间的任何符号。如果我在preg_match中使用PREG_OFFSET_CAPTURE标志执行此操作,匹配符号的索引将为10.我真的希望它返回3。
有没有办法做到这一点?
答案 0 :(得分:4)
唯一的方法是将整个模式偏移量(7)减去捕获组偏移量(10):10-7 = 3
$group_offset = $matches[1][1] - $matches[0][1];
答案 1 :(得分:1)
$string = 'I have a <1 + 2> day today and a foo <4 - 1> week.';
$match = array();
preg_replace_callback('/<\d+ ([+|-]) \d+>/', function($m)use(&$match){
$match[] = array($m[0], $m[1], strpos($m[0], $m[1]));
}, $string); // PHP 5.3+ required (anonymous function)
print_r($match);
<强>输出:强>
Array
(
[0] => Array
(
[0] => <1 + 2>
[1] => +
[2] => 3
)
[1] => Array
(
[0] => <4 - 1>
[1] => -
[2] => 3
)
)