如何在php正则表达式中的数组中存储多个匹配单词?

时间:2014-08-11 15:49:01

标签: php arrays regex

我希望匹配php中的html页面的不同单词,就像这样&但这些话有问题在同一句话!!

例如1和例2.同一页!!!

假设我有这些行

  Eg 1. $html="
    write('A')</script>
    write('B')</script>
    write('C')</script>
    write('D')</script>
    write('E')</script>";

preg_match_all(&#39; /写(\&#39;([A-Z])&#39;)&LT; /脚本&GT; /&#39;,$ HTML,$匹配); 我会匹配A,B,C,D,E但是......&amp; 如何存储多个匹配?

另一个与此相同的

我也想匹配所有这些&#34;数字&#34;在此代码中

Eg 2. $html="
    write(33453)</script>
    write(6987)</script>
    write(4544)</script>
    write(345)</script>
    write(7876)</script> ";

preg_match_all(&#39;?/写((*))≤; /脚本&GT; /&#39;,$ HTML,$匹配);

我的问题是如何在eg.1和eg.2中看到如何存储多个匹配,然后像下面的第三个输出中那样组合回显:(

A-33453
B-6987
C-4544
D-345
E-7876

&安培;我也想要帮助,如何在Eg 2中随机选择一个数字,比如数组中的345?

2 个答案:

答案 0 :(得分:0)

您没有获得任何数组结果,因为您的正则表达式错误:

preg_match_all('/write(\'[A-Z]\')</script>/',$html,$match);

()与字面括号不匹配。他们需要转发为\(\)

/之前,您还有一个未转义的分隔符script。这也需要逃避反斜杠。只要有什么东西不起作用,就启用error_reporting(E_ALL);

只有这样$match[0]才会包含任何内容。您可能希望在([A-Z])周围添加捕获数据以获得可用的$match[1]

答案 1 :(得分:0)

$html = <<<EOF
    write('A')</script>
    write('B')</script>
    write('C')</script>
    write('D')</script>
    write('E')</script>

    write(33453)</script>
    write(6987)</script>
    write(4544)</script>
    write(345)</script>
    write(7876)</script>
EOF;

preg_match_all('~write\(\'([A-Z])\'\)</script>~', $html, $match1);
preg_match_all('~write\(([0-9]+)\)</script>~', $html, $match2);

foreach ($match1[1] as $i => $char)
    echo "$char-{$match2[1][$i]}\n";