0

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

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

4

2 回答 2

0

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

在这种情况下,我将使用 regex (preg_match - not preg_match_all) 进行匹配var='...',以便您可以提取...字符串,然后用逗号分割字符串,将每个项目分隔成一个数组。

如果您尝试弯曲正则表达式以在一次操作中完成所有操作,那么它的效率和可靠性会大大降低(因为很难为这种情况编写坚如磐石的正则表达式)。

于 2012-08-09T10:08:49.160 回答
0

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

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

于 2012-08-09T09:56:13.563 回答