Regex 表达用法的特殊结构

Regex 表达用法的特殊结构,regex,pcre,Regex,Pcre,对于在正则表达式中使用的构造,我想知道尝试将多个构造操作成单个表达式以进行多个匹配的可能结果 让我们以下面这个例子为例 foo(bar)?(?(1)baz|quz) 现在与一个表达式组合,该表达式与前面的条件相匹配,然后我们用以下条件添加到前面的条件 foo(bar)?(?(1)baz|quz)|(?(?=.*baz)bar|foo) 我的主要问题是,您是否应该以这种方式构造正则表达式,以及您需要以这种方式使用它的目的是什么?我相信这一问题的答案最终将特定于所使用的正则表达式库或语言的实现。

对于在正则表达式中使用的构造,我想知道尝试将多个构造操作成单个表达式以进行多个匹配的可能结果

让我们以下面这个例子为例

foo(bar)?(?(1)baz|quz)
现在与一个表达式组合,该表达式与前面的条件相匹配,然后我们用以下条件添加到前面的条件

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

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

我相信这一问题的答案最终将特定于所使用的正则表达式库或语言的实现。(,维基百科)

对于正则表达式没有一个有效的定义。实现的多样性甚至会导致对“简单”表达式的失望——您考虑的细微差别可能是特定于实现的,而不是特定于正则表达式的

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

你应该用这种方式构造一个正则表达式吗 你是否曾有过这样使用它的目的

在这种情况下,也许在大多数情况下,我会说“不”

我经常发现条件句可以重写为lookarounds,也可以在替换中简化

比如,我觉得你提供的正则表达式

foo(bar)?(?(1)baz|quz)|(?(?=.*baz)bar|foo)
为更清晰起见,可替换为

bar(?=.*baz)|foo(?:quz|barbaz)?
这给了我们两个简单的匹配路径


但是你已经六个月没有发帖了。在这段时间里,你回答了很多问题,你是否觉得有必要这样做?

我不知道你在问什么,或者实际问题是什么?另外,if/else示例不太清楚,您应该尝试使用
foo(bar)(?(1)baz | qux)
来提供一个不易混淆的示例
(?(1)baz | qux)
表示,如果组1匹配,则匹配
baz
,否则匹配
qux
。因此,如果我理解正确,您想知道在一个表达式中2个(或更多)regex条件是否可行?这完全取决于上下文/情况。大多数人听到regex时都会头疼,更不用说读了,然后又在里面加入了一些神奇的条件句。。。这对他们来说是无法维持的。大多数情况下,您甚至不需要条件。在我看来,如果你要在生产中使用它们,那么就使用
x
修饰符并将其完整记录下来。这是一个很好的反馈,我同意大多数人很难理解和维护。你是对的,大多数条件句甚至都不需要使用。我投票结束了这个问题,因为
主要是基于观点的。看见