Php 正则表达式,问题组

Php 正则表达式,问题组,php,regex,Php,Regex,我想从带有regexp的行中获取所有字符 $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>"; h-最后一个搜索符号,为什么?,因为您多次使用组后的+。这样,每次都会匹配组,直到h

我想从带有regexp的行中获取所有字符

$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>";

h-最后一个搜索符号,为什么?

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


如果您希望每个匹配项都在一个组中,那么您必须在之后分割完整的匹配项,或者为自己创建每个组。

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

在本例中,我将使用正则表达式(preg_match-not preg_match_all)来匹配
var='''.
,这样您就可以提取
,然后用逗号分割字符串,将每个项分隔成一个数组


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

在所有当代引擎中,正则表达式都不仅仅是“正则表达式”:在(纯)正则语言中不包含反向引用。因此更新了标记.var=。(\w),?(\w),?(\w),?(\w),?(\w),?(\w),?(\w),?(\w),?(\w),?)。这样做?
Array
(
     [0] => Array
         (
             [0] => var = 'a, b, c, d, e, f, g, h'
         )

     [1] => Array
         (
             [0] => h
         )

     [2] => Array
         (
             [0] => h
         )

)