Специальная конструкция использования выражения
С конструкцией использования 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 будут улучшены, если люди будут более конкретны в отношении используемого языка или библиотеки, используемой используемым им приложением. При устранении моих собственных регулярных выражений в различных приложениях (например, текстовых редакторах) мне потребовалось некоторое время, прежде чем я понял, что нужно понимать конкретную используемую библиотеку.