+ -
当前位置:首页 → 问答吧 → 问个嵌套匹配的正则

问个嵌套匹配的正则

时间:2011-07-05

来源:互联网



$str=<<<TEXT

options nofmterr;
data ecg;
        set hu.ecg;
        tpd=scan(egtpd,1, ' ');
        where  substr(cpevent, 1, 9)^='SCREENING';
   for tpd=1 to 10;
      output;
     put tpd=;
            output;
            output
run;



data ecg;
........
run;
data pk;
........
output;
......
output;
.....
output;
run;
TEXT;


上面的文本中 只把 

 data xx
      出现三条output
  run;
这个代码匹配出来
意思就是 在data ... run结构中如果output出现三次 则匹配出来
能用一条正则匹配出来吗?

作者: yakczh   发布时间: 2011-07-05

  1. $str=<<<TEXT

  2. options nofmterr;
  3. data ecg;
  4.         set hu.ecg;
  5.         tpd=scan(egtpd,1, ' ');
  6.         where  substr(cpevent, 1, 9)^='SCREENING';
  7.    for tpd=1 to 10;
  8.       output;
  9.      put tpd=;
  10.             output;
  11.             output
  12. run;



  13. data ecg;
  14. ........
  15. run;
  16. data pk;
  17. ........
  18. output;
  19. ......
  20. output;
  21. .....
  22. output;
  23. run;
  24. TEXT;

  25. preg_match_all('/data [a-z0-9]+;((?:[\d\D]*output[\d\D]*){3})run;/iU', $str, $matches);
  26. echo '<pre>';print_r($matches[1]);
  27. /*
  28. 输出结果:
  29. Array
  30. (
  31.     [0] =>
  32.         set hu.ecg;
  33.         tpd=scan(egtpd,1, ' ');
  34.         where  substr(cpevent, 1, 9)^='SCREENING';
  35.    for tpd=1 to 10;
  36.       output;
  37.      put tpd=;
  38.             output;
  39.             output

  40.     [1] =>
  41. ........
  42. run;
  43. data pk;
  44. ........
  45. output;
  46. ......
  47. output;
  48. .....
  49. output;

  50. )
  51. */
复制代码

作者: yangball   发布时间: 2011-07-05

回复 yangball


    匹配的第二项不对,应该是 data pk; 。。。 run;中间的内容

作者: yakczh   发布时间: 2011-07-05