2012-04-19 1 views
0

Я пытаюсь разобрать обычную ссылку, но иногда вместе с этой ссылкой есть аналогичная, которая вместо текста содержит изображение.Regex: разбор ссылки, которая не содержит img в якоре

Я использовал этот шаблон: "#_blank\">(.*?)</a>#is, но это также соответствует ссылкам, содержащим изображения в якоре.

Как я могу разобрать только те, которые не содержат изображения?

+1

Можете ли вы разместить образец образца html, чтобы соответствовать? – HappyTimeGopher

+2

Вы должны а) предложить более конкретную информацию (например, какой вход не работает) и b) использовать парсер HTML. – hakre

+0

Пожалуйста, разместите код, имеющий отношение к вопросу. Вы можете сделать это, отредактировав свой собственный вопрос и добавив его там, в суть вопроса. Это поможет нам помочь вам. –

ответ

0

<a href=".*?">(?!<img.*?>).*?</a>

http://regexr.com?30n1q

Как насчет этого?

+0

Что делать, если есть класс перед href? что, если href находится в шапках? Что, если между заключительной цитатой href и закрывающей скобкой есть пробел? – HappyTimeGopher

+0

@HappyTimeGopher Не нужно так защищаться. Он даже не предъявлял таких особых требований. – Jack

+0

просто пытается сделать точку. Часто, когда кто-то задает вопрос, они не знают обо всех последствиях, поэтому они не могут задавать вопросы о краях. – HappyTimeGopher

0

Если вы не хотите никаких тегов совпавших внутри тега, попробуйте это, чтобы получить внутреннюю HTML от всех тегов на через страницу:

#<a [^>]+>([^<]+)</a>#si 

В свете Вашего комментария ...

то, что я бы, вероятно, сделать, чтобы избежать монстра регулярное выражение, является использование выше, то сделать это:

$output = strip_tags($match[1], '<b><i><u>'); 

Добавить другие допустимые теги по вкусу. Этот подход также обеспечивает отсутствие неприятных тегов в финальной строке.

+0

Только изображения, я не забочусь о том, есть ли жирный шрифт или другие теги, я думаю, ваш шаблон может быть изменен, я попробую, но я не очень хорошо разбираюсь в регулярном выражении. –

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