我有这样的正则表达式:
'(?:\$|???)(\040)?(\d+)|(\d+)(\040)?(?:\$|???)'
Run Code Online (Sandbox Code Playgroud)
它匹配以下字符串:
$23
23$
1000???
???1000
??? 1000
1000 ???
Run Code Online (Sandbox Code Playgroud)
我想将此正则表达式中的位数限制为8.
试过这个:
'(?:\$|???)(\040)?(\d{, 8})|(\d{, 8})(\040)?(?:\$|???)'
Run Code Online (Sandbox Code Playgroud)
它停止匹配任何东西.
我究竟做错了什么?
将{}有三个表格:
{N} 一段固定的时间 {M,} 至少M次 {N,M}在N和M次之间. 如果您使用最后一个,则必须使用最小值.
将正则表达式更改\d{1,8}为匹配1到8位数
从1开始,因为您正在使用+,这是一个快捷方式 {1,}
看看regex101.com是怎么说的:
\n\n
您可以使用{1,8}匹配 1 到 8 位数字的限制量词。我发现您的原始正则表达式中必须至少有 1 个+。
^(?:(?:\\$|\xd1\x81\xd1\x83\xd0\xbc)(\\040)?(\\d{1,8})|(\\d{1,8})(\\040)?(?:\\$|\xd1\x81\xd1\x83\xd0\xbc))$\nRun Code Online (Sandbox Code Playgroud)\n\n查看演示
\n\n来自正则表达式.info:
\n\n\n\n语法为
\n{min,max},其中min是零或正整数\n 数字,表示最小匹配数,max是等于或大于的整数\nmin表示最大匹配数。\n 如果逗号存在但max被省略,匹配的最大数量\n 是无限的。所以{0,1}与 相同?,{0,}与 相同*,\n{1,}与 相同+。省略逗号和 max 会告知\n 引擎精确重复令牌min次数。
\d{, 8}
Run Code Online (Sandbox Code Playgroud)
什么都没有.Engine会字面上匹配,所以你的正则表达式失败了.
使用
\d{0,8}
Run Code Online (Sandbox Code Playgroud)
里面没有空格 {}