我正在尝试解析以下字符串,即使它非常基本,也无法完全正确地获取正则表达式。我认为我的可选分组语法错误。数据可以是以下之一:
PV{X}
PV{X.X}
PV{X.X.X}
PV{X.X.X.X}
使用:
^PV\{\d+(\.\d+){0, 3}\}$
在哪里:
- PV 是恒定的。
- 花括号将始终存在。
- X 是一个正整数(一位或多位)。
- 可以存在多个 X 值(最小 1,最大 4),用点分隔。
好的,所以这个正则表达式会为你做:
PV\{(\d+?(?:\.\d+){0,3})\}
这是一个正则表达式 101来证明它。
差异?
首先,你有{0, 3}
,所以它认为这是一个要匹配的字面值。你只需要在那里摆脱它{space}
。接下来,可能出现的可选组,0 - 3
我在其中放置了一个?:
,因此它实际上并没有捕获该组。最后,我将实际值包装在内部,{ }
以便将其分组。您可能想更改一些分组,但这肯定会在适当的时候为您匹配整个字符串。
考虑以下正则表达式...
PV{\d{1,4}(.\d{1,4})*}