2016-05-21 1 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); 

Но лучше использовать анализатор. Regex и HTML не являются хорошим другом!

 Смежные вопросы

  • Нет связанных вопросов^_^