我需要以比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)
答案 0 :(得分:2)
不确定您要查找的是什么,但看起来您仍在尝试使用PREG_SET_ORDER而仍有偏移?
如果是这样,只需将两个标志传递给preg_match_all:
preg_match_all($find, $string, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE);
var_dump($matches)
可以使用位OR运算符组合这些数字标志(垂直管道)。