У меня есть HTML-код, и мне нужно сопоставить фразу «Моя фраза», которой нет в теге <a>
.
Фразы, которые НЕ должны совпадать:
1. <a>My Phrase</a>
2. <a><strong>My Phrase</strong></a>
Фразы, которые ДОЛЖНЫ совпадать:
3. <strong>My Phrase</strong>
4. My Phrase
Мое текущее решение использует отрицательный прогноз, чтобы найти совпадения, за которыми не следует закрывающий тег </a>
:
My Phrase(?![^<]*>|[^<>]*<\/a)
https://regex101.com/r/n1d9KZ/1
Как видно из примера, он работает для обычных текстовых ссылок (случай 1), но не работает для случая 2, когда внутри тега «a» есть другие теги.
У кого-нибудь есть отрицательное регулярное выражение, работающее на обоих?
Я не могу использовать отрицательный lookbehind с регулярным выражением, таким как (?<!<a.*?>.*?)My Phrase(?!.*?<\/a>)
, потому что я получаю ошибку java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length
. Я также предпочел бы не анализировать HTML-код и удалять все текущие теги «a», поскольку мне нужно сохранить HTML-код без изменений и заменить «My Phrase» на «Another Phrase».