У меня довольно длинный и сложный HTML-документ, и мне нужно найти все вхождения данной строки, например. «foobar», если он не находится между <a>
и </a>
якорных тегов.Regex challenge - найти «foobar» в документе HTML
Беда в том, что она может быть внутри некоторого текста между якорь-тегами, например.
<a>this is a foobar test</a>
и даже в этом случае, я должен не найти матч.
Как это сделать с регулярным выражением ?? У меня не будет проблем с поиском <a>foobar</a>
и так далее - но найти все «Foobar» за исключением когда это между тегами якорь и окружен возможной много другой текст кажется немного каверзный .....
Любые идеи ??
ОТВЕТ:
Мы закончили с помощью этого Regex, чтобы решить эту проблему - только в случае, если кто является) любопытным, или б) в том же месте :-)
(?<!\<A.*(?=\<\/A))Test(?!\<\/A.*(?=\<A))
Как прокомментировал Барт, регулярные выражения решения для разбора HTML, как правило, либо не в некоторых случаях (встроенные метки) или быть чрезвычайно сложным. Попробуйте использовать парсер DOM вместо этого, чтобы найти весь текст в тегах привязки, затем выполните строковый поиск или регулярное выражение. – TrueWill
Коррекция - используйте DOM для поиска текстовых узлов, которые не содержатся в тегах привязки. – TrueWill