2016-05-21 22 views
0

Ich habe diesen Code:PHP preg_match - unerwarteter Ausgang

<?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); 

Der Ausgang dieses Codes ist dies:

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"> 
) 

Was ich nicht verstehe, ist, warum die Zelle nicht 0 in dem Ausgangsarray mit <form name=" starten?

Antwort

1

Setzen Sie die Alternative in einer Gruppe:

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

Aber Sie besser einen Parser verwenden würde. Regex und HTML sind keine guten Freunde!