如何在RegEx表达式中接受可选参数?

时间:2012-01-18 19:45:09

标签: regex optimization optional

我想稍微简化一下这个表达式。有没有更好的方法来使用查找或其他东西?当谈到正则表达式时,我很年轻。参数3美元,5美元和7美元的参数是可选的。需要1美元。

^
/application/
([0-9a-zA-Z_]+)
([\/]([0-9a-zA-Z_]+))?
([/\?|\?|\/]([^\?]*))?
([\?](.*))?
$

service => $1
target  => $3
args    => $5
filter  => $7

/应用/混合器/香蕉?添加=牛奶。

btw我使用RegExr来构建和测试表达式,如果你没有听说过它,它是一个很好的工具。

1 个答案:

答案 0 :(得分:1)

此:

([\/]([0-9a-zA-Z_]+))?

可以简化为:

(\/[0-9a-zA-Z_]+)?

([\?](.*))?

可以简化为:

(\?.*)?

因为+*(以及?)仅适用于前一项。

我不确定这是什么:

[/\?|\?|\/]

应该是。也许你的意思是:

(?:/\?|\?|\/)

即。 /??/。 ((?:...)是非捕获组。)

这给出了:

^
/application/
([0-9a-zA-Z_]+)
(\/[0-9a-zA-Z_]+)?
((?:/\?|\?|\/)[^?]*)?
(\?.*)?
$

service => $1
target  => $2
args    => $3
filter  => $4