php preg_match - 意外输出

时间:2016-05-21 17:19:02

标签: php regex preg-match

我有这段代码:

<?php

$str = '<form name="signIn" action="http://example.com" method="post">' .
 '<input type="hidden" name="myname" value="xyz"><input type="hidden"   name="yourname" value="abc">' .
 '</form>';

preg_match('/<form name=\"sign_in|signIn\" (.+)>(.+)<\/form>/Us', $str, $m);

print_r($m);

此代码的输出为:

Array
(
 [0] => signIn" action="http://example.com" method="post"><input type="hidden" name="myname" value="xyz"><input type="hidden" name="yourname" value="abc"></form>
 [1] => action="http://example.com" method="post"
 [2] => <input type="hidden" name="myname" value="xyz"><input type="hidden" name="yourname" value="abc">
)

我不明白为什么输出数组中的单元格0不以<form name="开头?

1 个答案:

答案 0 :(得分:1)

将替代方案放在一个组中:

preg_match('/<form name="(?:sign_in|signIn)" (.+)>(.+)<\/form>/Us', $str, $m);

但是你最好使用解析器。正则表达式和HTML不是好朋友!