我有4种不同的输入类型:
我需要将组提取为
{group1} OF {group2} AS {group 3}
where,
group1 = 'COUNT'
group2 = 'apples >= 18'
group3 = 'apples'
对于第一个输入,我可以使用以下正则表达式
`/(.*) OF (.*) AS (.*)/g`.
我是否必须对所有这些使用单独的正则表达式,还是由一个正则表达式处理所有这些输入?
答案 0 :(得分:2)
您可以使用OF
和AS
可选部件,例如:
/^(?:(.*?) OF )?(.*?)(?:AS (.*))?$/
如您在regex101上所见,我们捕获了三组:OF
之前的部分,中间部分和AS
之后的部分。
regex101引擎还显示捕获内容:
Match 1 Full match 0-32 `COUNT OF apples >= 18 AS oranges` Group 1. n/a `COUNT` Group 2. n/a `apples >= 18 ` Group 3. n/a `oranges` Match 2 Full match 33-54 `COUNT OF apples >= 18` Group 1. n/a `COUNT` Group 2. n/a `apples >= 18` Match 3 Full match 55-78 `apples >= 18 AS oranges` Group 2. n/a `apples >= 18 ` Group 3. n/a `oranges` Match 4 Full match 79-85 `apples` Group 2. n/a `apples`
因此,我们使用(..)?
部分将某些元素设为可选,并使用.*?
进行非贪婪捕获。
但是请注意,如果表达式包含多个OF
或AS
,则解析器将使用第一个OF
作为分隔符,并使用第一个{{1} }作为分隔符。因此,AS
将被分隔在COUNT OF apples >= 18 OF lemon < 12 AS bar AS qux
中。