выражение соответствия регулярному выражению, за исключением заданной c строки (без отрицательного взгляда) - PullRequest
1 голос
/ 24 февраля 2020

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

<script></script>

Я хотел бы сделать исключение для следующего тега HTML специально:

<b> 

Который я не хочу снимать. Есть ли способ сделать это, не используя отрицательный взгляд / взгляд назад?

На данный момент у меня есть что-то вроде этого:

((\%3C)|<)[^<b]((\%2F)|\/)*[^<\/b][a-z0-9\%\=\'\(\)\ ]+((\%3E)|>)

https://regex101.com/r/ZxkVMJ/2

Он работает, но кроме

<b> 

он также не захватывает все 1-символьные теги

(like <a> for example) 

, а также более длинные теги, начинающиеся с b, как, например,

<balloon>

Спасибо за любую помощь

1 Ответ

2 голосов
/ 24 февраля 2020

В качестве заявления об отказе от ответственности, если у вас есть какой-либо синтаксический анализатор XML / HTML, вы должны действительно использовать его для своей текущей проблемы. Если вы вынуждены использовать здесь регулярное выражение, рассмотрите этот шаблон:

<([^b][^>]*|b[^>]+)>.*?<\/\1>

Это соответствует тегу HTML, который либо начинается с буквы, отличной от b, либо тегу, который начинается с b, но затем следует один или несколько других символов (исключая, таким образом, <b>). Вот рабочая демонстрация:

Демо

...