2016-05-21 5 views
0

私はこのコードを持っている:PHPのする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

グループの代替入れ:

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

をしかし、あなたはより良いパーサを使用すると思います。正規表現とHTMLは良い友人ではありません!