2

通过在正则表达式中使用的构造If-Then-Else Conditionals,我想知道尝试将许多构造操作到单个表达式中以进行多个匹配的可能结果。

让我们在下面举这个例子。

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

现在与一个表达式组合,它匹配前面的条件,然后我们用以下条件添加到前面的条件..

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

我主要是问你是否应该以这种方式构造一个正则表达式,以及你需要以这种方式使用它的目的是什么?

4

2 回答 2

1

我相信这个问题的答案最终将特定于正在使用的正则表达式库或语言的实现。(“正则表达式引擎的比较”维基百科。)

没有正式的 RFC 或正则表达式规范。实现的多样性导致即使是“简单”的表达式也令人沮丧——您正在考虑的细微差别可能是特定于实现的,而不是特定于正则表达式的。

甚至超出您的具体问题,我认为如果人们更具体地了解所使用的语言或他们正在使用的应用程序所使用的库,那么 StackOverflow 上大多数与正则表达式相关的问题都会得到改进。在对各种应用程序(例如文本编辑器)中我自己的正则表达式进行故障排除时,我花了一段时间才意识到需要了解正在使用的特定库。

于 2014-01-23T17:21:35.090 回答
1

你应该以这种方式构造一个正则表达式,你需要以这种方式使用它的目的是什么?

在这种情况下,可能是大多数情况下,我会说“不”。

我经常发现条件句可以重写为环视或在交替中简化。

例如,在我看来,您提供的正则表达式,

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

为了更清楚,可以替换为

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

这给了我们两个简单的匹配路径。

但是自从您发布问题以来已经六个月了。在这段时间里,回答了很多关于 SO 的问题,你有没有觉得需要这种结构?

于 2014-05-12T04:40:43.953 回答