我有这样的正则表达式:
'(?:\$|сум)(\040)?(\d+)|(\d+)(\040)?(?:\$|сум)'
它匹配以下字符串:
$23
23$
1000сум
сум1000
сум 1000
1000 сум
我想将此正则表达式中的位数限制为8.
试过这个:
'(?:\$|сум)(\040)?(\d{, 8})|(\d{, 8})(\040)?(?:\$|сум)'
它停止匹配任何东西。
我做错了什么?
答案 0 :(得分:5)
\d{, 8}
意味着什么。发动机将按字面意思匹配,因此你的正则表达式失败了。
使用
\d{0,8}
{}
答案 1 :(得分:5)
{}
有三种形式:
{N}
一段固定的时间{M,}
至少M次{N,M}
N次和M次之间。 如果您使用最后一个,则必须使用最低要求。
将正则表达式更改为\d{1,8}
以匹配数字的1到8倍
当您使用+时,从1开始,这是{1,}
答案 2 :(得分:4)
查看regex101.com所说的内容:
您可以使用匹配1到8位数的{1,8}
限制量词。我知道你必须至少有1个,因为你的原始正则表达式中有+
。
^(?:(?:\$|сум)(\040)?(\d{1,8})|(\d{1,8})(\040)?(?:\$|сум))$
请参阅demo
语法为
{min,max}
,其中min
为零或正整数 表示最小匹配数的数字,max
是整数 等于或大于min
表示最大匹配数。 如果逗号存在但省略max
,则最大数量为 比赛是无限的。因此{0,1}
与?
相同,{0,}
与*
相同, 和{1,}
与+
相同。省略逗号和最大值就可以了 引擎完全重复令牌min
次。
答案 3 :(得分:3)
尝试指定下限,例如(\d{0,8})
。
除了一些正则表达式方言在{0,8}
构造中逗号后不允许空格。
答案 4 :(得分:1)
答案 5 :(得分:1)
同时指定下限
(?:\$|сум)(\040)?(\d{1,8})|(\d{1,8})(\040)?(?:\$|сум)
这样可行。