Техника регулярных выражений для запрета просмотра переменной длины с помощью ИЛИ [дубликата]

2

Я хотел бы узнать, как работает двигатель регулярного выражения, чтобы запретить переменную длину lookbehind для описанной ниже техники. Это обычно используется для создания шаблонов, которые имеют конкретное слово, но не должны иметь предыдущего.

Например, в этом сообщении: RegEx, который соответствует слову, которому НЕ удаётся другой, идея состоит в том, чтобы соответствовать кубу слова, только если слово small не является присутствует в предыдущем 20 символах.

Итак, ответ anubhava на этот вопрос:

.*?small.{0,20}cube|(.*?cube)

И его комментарий был:

На самом деле это простой способ обхода движка регулярных выражений возможности отклонения переменной длины lookbehind. В этом регулярном выражении мы совпадайте с тем, что нам не нужно, используя конструкцию pipe (OR) слева и, наконец, оставить правильное совпадение в трубе, используя захваченная группа.

Я думаю, что этот метод очень полезен, но не знает, как его использовать. Я хотел бы понять, как работает regex engine для создания такого регулярного выражения. Может кто-нибудь дать мне руку на это, объяснив мне это?

Кстати, не знаю, работает ли этот techinique во всех машинах с регулярными выражениями, поэтому я назвал этот вопрос java, поскольку я буду использовать его в основном на нем.

Показать ещё 1 комментарий
Теги:

1 ответ

0

Идея состоит в том, чтобы предпочесть совпадение отрицательного над положительным, поэтому, если отрицательный результат будет соответствовать, то он будет соответствовать, и вы не получите положительное совпадение в первой группе.

На самом деле это не работает одинаково; если бы это было так, двигатели регулярных выражений использовали бы его.

put the cube on top of the small cube
        ^ should match cube, but doesn’t, since smallcube is preferred

Ещё вопросы

Сообщество Overcoder
Наверх
Меню