假设我们有以下字符串:
理想情况下,我们应该从上面的正则表达式中获得以下几个组:
1|order=asc|type=1
我们需要创建一个正则表达式来解析参数,假设字符串始终以数字开头,并且(可选)具有任意顺序的参数(order,asc)。另外,它可能具有3个或更多参数,但出于简单起见,让我们保留2个参数。
例如,这些是正则表达式将理解的字符串:
1
1|order=asc|type=1
1|type=1|order=asc
我有以下表达式可以完成此任务:
(?<id>^\w+)((?:\|type=(?<type>\w+))|(?:\|order=(?<order>\w+))){0,2}
这是我正则表达式的演示链接
但问题在于它允许重复。
如果我们有以下字符串,它将根本不匹配order
参数:
1|type=1|type=2|order=asc
理想情况下,我们应该从上面的正则表达式中获得以下几个组:
- id:1
- type:2(因为它应该捕获最后出现的实例)
- order:asc
^(?<id>\w+)(?:\|(?:type=(?<type>\w+)|order=(?<order>\w+)))+$
的正则表达式可以实现这个功能?请参考 https://regex101.com/r/uZJfkp/1 - Wiktor Stribiżew<id>
,需要使用*
而不是+
。@WiktorStribiżew。不错的解决方案。发布一下吗? - JvdV*
。 - Wiktor Stribiżew\w+=\w*
模式作为替代方案添加,.*
匹配太多。请参见^(?<id>\w+)(?:\|(?:type=(?<type>\w+)|order=(?<order>\w+)|num=(?<num>\d+)|status=(?<status>\w+)|\w+=\w*))*\|?$
(演示)。 - Wiktor Stribiżew