PHP:preg_match_all - 无论如何捕获偏移并使用PREG_SET_ORDER标志?

时间:2015-07-17 22:21:46

标签: php

我需要以比preg_Set_order更直观的方式分配匹配,同时仍然获得每个匹配的偏移量。反正有没有完成这个?

我需要捕获什么样的标记,并且不希望对捕获进行后期处理。 Lookbehind只是一团糟。

这将获得所有标签并且有偏移但总是会弹出一个过度的3-dim数组:

preg_match_all('|(?<=<)[\/a-zA-Z]+|',$file,$matches,PREG_OFFSET_CAPTURE);

这会产生更清晰的结果,但我不知道标签所在的偏移量:

preg_match_all('|<(\/*)([a-zA-Z]+)[^>]*>|',$file,$matches,PREG_SET_ORDER)

所以我需要的是两者的结合:

preg_match_all('|<(\/*)([a-zA-Z]+)[^>]*>|',$file,$matches,PREG_SET_ORDER,PREG_OFFSET_CAPTURE)

1 个答案:

答案 0 :(得分:2)

不确定您要查找的是什么,但看起来您仍在尝试使用PREG_SET_ORDER而仍有偏移?

如果是这样,只需将两个标志传递给preg_match_all:

preg_match_all($find, $string, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE);
var_dump($matches)

可以使用位OR运算符组合这些数字标志(垂直管道)。