Я знаю, о чем вы думаете: "Боже мой, серьезно, не снова" - но, пожалуйста, несите меня, мой вопрос больше, чем титул. Прежде чем мы начнем, я обещаю, что никогда не попытаюсь проанализировать произвольный HTML с регулярным выражением или спросить кого-нибудь еще.
Все много и много ответов здесь объясняют, почему вы не можете этого сделать, опираясь на формальное определение регулярных выражений. Они анализируют обычные языки, HTML является контекстно-свободным, но не регулярным, поэтому вы не можете этого сделать. Но я также слышал, что многие реализации регулярных выражений на разных языках не являются строго регулярными; они приходят с дополнительными трюками, выходящими за пределы формальных регулярных выражений.
Поскольку я не знаю деталей каких-либо конкретных реализаций, таких как perl, мои вопросы:
- Какие функции регулярных инструментов нерегулярны? Это обратные ссылки? И на каких языках они найдены?
- Есть ли какой-либо из этих дополнительных трюков, достаточных для анализа всех контекстно-свободных языков?
- Если "нет" на # 2, есть ли формальная категория или класс языков, на которые эти дополнительные функции распространяются точно? Как мы можем быстро узнать, находится ли проблема, которую мы пытаемся решить, во власти наших не обязательно регулярных выражений?