假设我给出一个模式 123* 或 1234* ,我想匹配以该模式开头的任何 10 位数字。它应该正好有 10 位数字。
Example:
模式:123 应匹配 1234567890,但不匹配 12345678
我尝试了这个正则表达式:(^(123)(\d{0,10}))(?(1)\d{10})..显然它不起作用。我尝试将模式和剩余数字分为两个不同的组。它匹配捕获组后的10位数字(https://regex101.com/ https://regex101.com/)。如何检查捕获的组是否正好是 10 位数字?或者说这里面有什么好的技巧吗?请指导我。
听起来像是一个案例积极的前瞻 http://www.regular-expressions.info/lookaround.html:
(?=123)\d{10}
这将匹配任何正好 10 位数字的序列,但前提是前缀为123
。测试一下here https://regex101.com/r/9X5YMl/1.
类似地对于前缀1234
:
(?=1234)\d{10}
当然,如果您预先知道前缀长度,则可以使用123\d{7}
,但随后您必须随着每个前缀的更改而更改范围限制(例如:1234\d{6}
).
此外,为了确保仅捕获 10 位数字的孤立组,您可能需要使用(零长度)字边界来锚定上述表达式\b
:
\b(?=123)\d{10}\b
或者,如果您的序列可以出现单词里面,您可能需要使用负向后查找和向前查找\d
(正如@Wiktor 评论中所建议的):
(?<!\d)(?=123)\d{10}(?!\d)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)