正则表达,问题组

时间:2012-08-09 09:52:16

标签: php regex

我想从正则表达式中获取所有字符。

$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 - 最后一个搜索符号,为什么?

2 个答案:

答案 0 :(得分:0)

因为您在群组之后使用+多次重复使用该群组。这样,每次都会匹配该组,直到最后一次匹配的h,表达式完成。

如果您希望每场比赛都在一个组中,那么您必须在之后拆分完整的比赛或为自己创建每个组。

答案 1 :(得分:0)

我认为你正在尝试做一些不太适合正则表达式的事情 - 尽管有时它们是工作的最佳工具,但它们仅限于匹配可​​以某种方式描述的模式。它们没有控制逻辑,因此无法循环或递归。最好使用正则表达式和其他方法来实现你想要的效果。

在这种情况下,我会使用正则表达式(preg_match - 而不是preg_match_all)来匹配var='...',这样你就可以提取...,然后用逗号分割字符串,将每个项目分成一个数组。 / p>

如果你试图弯曲正则表达式在一次操作中完成所有操作,它最终效率低得多,而且不太可靠(因为在这种情况下很难写出坚如磐石的正则表达式)。