通过在正则表达式中使用If-Then-Else Conditionals
的构造,我想知道尝试将许多构造操作到多个匹配的单个表达式中的可能结果。
我们来看下面这个例子。
foo(bar)?(?(1)baz|quz)
现在与表达式相结合,该表达式匹配先前条件,然后我们将以下条件添加到上一个...
foo(bar)?(?(1)baz|quz)|(?(?=.*baz)bar|foo)
主要是我问你是否应该以这种方式构建正则表达式,以及以这种方式使用它的目的是什么?
答案 0 :(得分:1)
我相信这个问题的答案最终将特定于正在使用的正则表达式库或语言的实现。 ("Comparison of regular expression engines",维基百科。)
正则表达式没有official RFC or specification。并且实现的多样性导致甚至做出“简单”表达的挫败感 - 您正在考虑的细微差别可能是特定于实现的,而不是特定于正则表达式。
即使超出了您的具体问题,我认为如果人们对使用的语言或他们正在使用的应用程序所使用的库更具体,那么StackOverflow上的大多数与正则表达式相关的问题都会得到改善。在各种应用程序(例如文本编辑器)中对我自己的正则表达式进行故障排除时,我花了一段时间才意识到需要了解所使用的特定库。
答案 1 :(得分:1)
你应该用这种方式构造一个正则表达式吗? 你是否需要以这种方式使用它?
在这种情况下,可能大多数情况下,我会说“不”。
我经常发现条件可以重写为外观或在交替中简化。
例如,在我看来,你提供的是正则表达式,
foo(bar)?(?(1)baz|quz)|(?(?=.*baz)bar|foo)
可以更明确地替换
bar(?=.*baz)|foo(?:quz|barbaz)?
给了我们两个简单的匹配路径。
但是你发布这个问题已经六个月了。在这段时间里,回答了很多关于SO的问题,你有没有觉得需要这种结构?