我想从正则表达式中获取所有字符。
$str = "html code <script> var='a,b,c,d,e,f,g,h' </sript> html code";
preg_match_all ('#var =.((\w),?)+.#',$str,$m);
echo "<pre>";
print_r ($ m);
echo "</ pre>";
结果:
Array
(
[0] => Array
(
[0] => var = 'a, b, c, d, e, f, g, h'
)
[1] => Array
(
[0] => h
)
[2] => Array
(
[0] => h
)
)
h - 最后一个搜索符号,为什么?
答案 0 :(得分:0)
因为您在群组之后使用+
多次重复使用该群组。这样,每次都会匹配该组,直到最后一次匹配的h
,表达式完成。
如果您希望每场比赛都在一个组中,那么您必须在之后拆分完整的比赛或为自己创建每个组。
答案 1 :(得分:0)
我认为你正在尝试做一些不太适合正则表达式的事情 - 尽管有时它们是工作的最佳工具,但它们仅限于匹配可以某种方式描述的模式。它们没有控制逻辑,因此无法循环或递归。最好使用正则表达式和其他方法来实现你想要的效果。
在这种情况下,我会使用正则表达式(preg_match - 而不是preg_match_all)来匹配var='...'
,这样你就可以提取...
,然后用逗号分割字符串,将每个项目分成一个数组。 / p>
如果你试图弯曲正则表达式在一次操作中完成所有操作,它最终效率低得多,而且不太可靠(因为在这种情况下很难写出坚如磐石的正则表达式)。