Специальная конструкция использования выражения

С конструкцией использования If-Then-Else Conditionals в регулярных выражениях я хотел бы узнать возможные результаты попыток манипулировать многими конструкциями в одно выражение для нескольких совпадений.

Давайте рассмотрим этот пример ниже.

foo(bar)?(?(1)baz|quz)

Теперь комбинируется с выражением, которое соответствует предыдущим условиям, а затем добавляем к предыдущему со следующими условиями.

foo(bar)?(?(1)baz|quz)|(?(?=.*baz)bar|foo)

В основном, я прошу, если вы создадите регулярное выражение таким образом и какой будет цель, которую вам нужно будет использовать таким образом?

Ответы

Ответ 1

если вы создадите регулярное выражение таким образом и что когда-либо быть целью, которую вам нужно будет использовать таким образом?

В этом случае, и, вероятно, в большинстве случаев я бы сказал "нет".

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

Например, мне кажется, что регулярное выражение, которое вы указали,

foo(bar)?(?(1)baz|quz)|(?(?=.*baz)bar|foo)

может быть заменен для большей ясности на

bar(?=.*baz)|foo(?:quz|barbaz)?

который дает нам два простых пути соответствия.

Но прошло шесть месяцев с тех пор, как вы опубликовали вопрос. В течение этого времени, отвечая на множество вопросов о SO, вы когда-нибудь ощущали необходимость такого рода строительства?

Ответ 2

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

Для регулярных выражений не существует официального RFC или спецификации. И разнообразие реализаций приводит к разочарованию, делая даже "простые" выражения - нюансы, которые вы рассматриваете, скорее всего специфичны для реализации, а не для регулярных выражений.

И даже вне вашего конкретного вопроса, я думаю, что большинство связанных с регулярным выражением вопросов по StackOverflow будут улучшены, если люди будут более конкретны в отношении используемого языка или библиотеки, используемой используемым им приложением. При устранении моих собственных регулярных выражений в различных приложениях (например, текстовых редакторах) мне потребовалось некоторое время, прежде чем я понял, что нужно понимать конкретную используемую библиотеку.