带有多个字符分隔符的正则表达式

Regex with multiple character separator

本文关键字:分隔符 正则表达式 字符      更新时间:2023-10-16

我有这个字符串

options{Red | Blue | Green}

我想一个接一个地捕获大括号内的选项。到目前为止,我能够捕获内部部分,但我不明白如何将模式 SPACELINESPACE|设置为分隔符并捕获红蓝绿。

为了捕获大括号内的字符串,我使用了这个options{(.)*}

我在用这个捕获值时有一些结果:

(.+?)(?: | |$)

但是当我像这样创作所有内容时options={(.+?)(?: | |$)}我没有捕捉任何东西

你能用这样的东西吗:

w+(?=[^{]*?})
>EDIT 1:下面的评论中提到的OP:

"如果我有这样的东西呢,options{Red | Blue | green },users={ Paul | Ringo | John | George}?我只想捕捉选项。

我不确定使用什么风格,但下面的模式将否定在"用户"中找到的子字符串。

busers={.*?}(*SKIP)(*F)|w+(?=[^{]*?})

观看在线演示

>编辑2:

在不知道除了"用户"之外是否还有其他类别需要否定的情况下,我们可以扩展上面的模式:

(?<!boptions){.*?}(*SKIP)(*F)|w+(?=[^{]*?})

观看在线演示

另一种方法是使用以下方法使用提升和匹配子字符串:

(?:boptions{|G(?!^))(?:[ |]+)?Kw+

观看在线演示

您可以通过几个(非正则表达式(步骤完成其余的工作: 使用您的第一个正则表达式,在|上拆分,然后修剪。

如果您想在正则表达式中完成所有这些操作,并最终将每种颜色放在不同的组中,它可能更复杂但可行,我将尝试挑战。 总是有3种颜色吗?如果是这样,那就容易多了。

编辑: 仅使用正则表达式,这将完成(?!.*{)([^ |}]+)的技巧,具有组 1 中的选项

https://regex101.com/r/0Zjzz8/1