2015-09-14 4 views
0

Я пишу простой кодPHP регулярное выражение preg_match с HTML тега

$test='<span class="h2">AAAA</span> <div>aaaa</div> <p>ccc</p>'; 
preg_match('<\<(.*)>',$test,$matches); 
echo $matches[0] 

Результат:

AAAA

aaaa

ccc

Я не мог понять, почему $ матчей [0] будет так.

Может кто-нибудь объяснить немного?

Спасибо.

+0

Каков ваш ожидаемый результат? –

+0

Вы можете найти более подробную информацию здесь http://www.noupe.com/development/php-regular-expressions.html – Arunendra

+0

Остановите это, вопрос имеет две проблемы: вывод не является тем, что думает вопросчик, и разделителями. Ссылка на regex с синтаксисом самого регулярного выражения не помогает. – chx

ответ

1

Это результат, который вы видите в браузере. Проверьте источник HTML или запустите из командной строки. Что вы на самом деле получаете:

<span class="h2">AAAA</span> <div>aaaa</div> <p>ccc</p> 

Почему? Потому что <> - это delimiter вашего прега! Таким образом, фактическое регулярное выражение - это только \<(.*), говоря «дайте мне меньше, чем знак, а затем любое количество всего». preg жадный, поэтому он будет потреблять столько, сколько может, поэтому вот почему.

+0

Спасибо. Понятно теперь. –

+0

Не думайте, что это всего лишь ошибка новичка: во время разработки Drupal 8 была введена дыра безопасности (но [поймана] (https://drupal.org/node/2508654)), потому что мы перепутали '[]' для классов символов с '[]' в качестве разделителя preg. Разделители в стиле скобок путают и опасны. – chx

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