2015-04-15 4 views
0

Я хочу взять абзац или div из html, но если он не содержит формы. Например:Строка соответствия регулярного выражения без подстроки

<p><form>I don't want this text</form>and not this text</p> 
<p>I want to take this text</p> 

Я работает вариант, без формы фильтра.

/(?:<(?:p|div)[^>]*>)(.*)(?:<\/(?:p|div)>)/iu 

И не работает вариант с фильтром

/(?:<(?:p|div)[^>]*>)((?:.(?!<form))*)(?:<\/(?:p|div)>)/iu 

Можете ли вы мне помочь?

+0

Что именно не работает в каких случаях это дает неправильный результат (а что ожидаемый результат в тех случаях) – Keelan

+1

http://stackoverflow.com/questions/1732 348/regex-match-open-tags-except-xhtml-self-contains-tags/1732454 # 1732454 –

ответ

1

Предупреждение: анализ HTML с регулярным выражением всегда был и всегда будет плохой идеей.

Вот немного модифицированная версия вашего регулярного выражения:

/(?:<(?:p|div)[^>]*>)(?!.*\<form\>)(.*)(?:<\/(?:p|div)>)/iu 

я улучшил его, чтобы позволить вам поймать любой пункт, содержащий слово «форму (а не тег) Попробуйте с. этот тест:?

<p><form>I don't want this text</form>and not this text</p> 
<p>I want to take this text even if it contains the "form" word!</p> 
<p>I want to take this text</p> 
+0

Спасибо, я вдруг понял, что я смотрю на html, но regexp работает с shortcodes :) Извините, за мою невнимательность. –

+1

@StetsenkoStas Если это решило вашу проблему, пожалуйста, примите его, нажав галочку слева от ответа. –

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