Regex не видит символ перед скобками

Регулярное выражение: >(?=([^(\"|\')]*(\"|\')[^(\"|\')]*(\"|\'))*(?![^(\"|\')]*(\"|\')))

Текст:

> комментарий

print: "((var))"

оно не находит > если дальше в тексте есть ()

Как это исправить, если учесть что текст может быть любым?


Ответы (1 шт):

Автор решения: Alexander Mashin

У Вас какие-то странные классы символов. Внутри них не надо ставить (\'|\"), это синтаксис для выбора одной из нескольких альтернатив любой длины вне класса символов. Должно быть [^\"\'], если Вы имели в виду «не одинарные и не двойные кавычки».

После замены получается >(?=([^\"\']*(\"|\')[^\"\']*(\"|\'))*(?![^\"\']*(\"|\'))) (https://regex101.com/r/TN6OVf/1/). Не знаю, этого ли Вы хотели.

P.S. (\'|\") вне класса символов, с другой стороны, можно заменить на [\'\"], получив >(?=([^\"\']*[\"\'][^\"\']*[\"\'])*(?![^\"\']*[\"\'])) (https://regex101.com/r/TN6OVf/2).

→ Ссылка