2015-06-28 2 views
0

Я уже нашел много stackoverflow questions по этой теме. Но я не могу найти решение этих вопросов для своей проблемы.Php: Как игнорировать новую строку в Regex

У меня есть следующий HTML:

<p><a name="first-title"></a></p> 
<h3>First Title</h3> 
<h2><a href='#second'>Second Title</a></h2> 
<h3>Third Title</h3> 

Я хочу узнать <h3> вставляться перед по </a></p>. В этом случае выход должен быть:

<h3>First Title</h3> 

Поэтому я реализую следующее регулярное выражение;

preg_match_all('/(?<=<\/a><\/p>)<h3>(.+?)<\/h3>/s',$html,$data); 

выше регулярное выражение не может выводить что-либо из приведенного выше HTML. Но если я удаляю новые строки из html, приведенное выше регулярное выражение может корректно выводить результат моего желания.

Я не хотел бы, чтобы удалить новой строки из HTML, если это возможно. Как я должен разработать регулярное выражение игнорировать новые строки из исходной строки?

Пожалуйста, помогите мне.

+0

Прочитайте это http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454. Регулярные выражения НЕ являются способом анализа HTML – Jojodmo

ответ

3

Приходит использование \K, так как вы не можете использовать qunatifiers внутри утверждений поиска.

preg_match_all('/<\/a><\/p>\s*\K<h3>(.+?)<\/h3>/s',$html,$data); 

или просто положить \n символ внутри просмотра назад.

preg_match_all('/(?<=<\/a><\/p>\n)<h3>(.+?)<\/h3>/s',$html,$data); 
Смежные вопросы