问题描述
我的字符串要求是m +/- n.n。它将接受字符串m加号(+)或减号(-)任何整数或十进制数。即m + 1,m + .1,n + 0.1,m + 1.1,与减号(-)相似。
我尝试使用正则表达式模式'^(?:m|M)[+-](\\d{1,})?(\\.\\d{1,0})?$'
这里的问题是它也在接受'm +'或'm-',但不应接受。这里,在[+-]之后有两个组,两个组都是单独可选的,需要支持0.1、0.1、1、1.1。希望将这两个组转换为一组并强制执行。
解决方法
一种方法可能是在两个组之前添加前瞻:
^(?:m|M)[+-](?=[\d.])(\d+)?(\.\d+)?$
在这里我添加了(?=[\d.])
,它断言.
之后必须有\d
或[+-]
,但不消耗它,因为它应该是先行后由可选组使用。
Regex Demo
,您可以使用character class来匹配M或m以及+或-。
然后在组1中捕获匹配的0+数字,可选的点和1+数字。
这样,只有一个捕获组,这不是可选的,因此像m-
这样的字符串本身不会匹配。
^[Mm][+-](\d*\.?\d+)$
说明
-
^
字符串的开头 -
[Mm]
匹配M或m -
[+-]
匹配+或- -
(
捕获组1-
\d*\.?\d+
匹配0+个数字,可选.
和1+个数字
-
-
)
关闭第1组 -
$
字符串结尾
请注意,在示例中,此\d{1,0}
无效。