求匹配18-99数字与m可选空格组合格式的正则表达式
18-99数字与m组合正则匹配方案
原有正则问题
之前编写的正则(1[89]|[2-9]\d) m (1[89]|[2-9]\d)存在逻辑错误:它强制要求匹配「数字 + 空格 + m + 空格 + 数字」的固定三段结构,和「数字、m两个元素顺序可互换,中间可选空格」的规则完全不符,因此会出现大量误匹配。
可用正则
子串匹配(匹配长文本中符合规则的片段)
(?:m ?(?:1[89]|[2-9]\d)|(?:1[89]|[2-9]\d) ?m)
整串精确匹配(要求整个字符串完全符合规则,前后无其他字符)
^(?:m ?(?:1[89]|[2-9]\d)|(?:1[89]|[2-9]\d) ?m)$
规则说明
- 正则通过
|分割两种合法排列逻辑,覆盖顺序可互换的要求:m ?(?:1[89]|[2-9]\d):匹配m开头,后接0或1个空格,再接18-99区间数字的组合(?:1[89]|[2-9]\d) ?m:匹配18-99区间数字开头,后接0或1个空格,再接m的组合
?用于匹配可选的单个空格,刚好覆盖「中间可加空格也可不加」的要求(?:1[89]|[2-9]\d)是18-99数字的匹配逻辑:覆盖18、19,以及20-99所有两位数,用非捕获组做逻辑分组,不会产生多余的捕获结果,匹配性能更优
匹配验证
- 可正常匹配的示例:
m18、18m、m 18、18 m、m99、99m、m 30、65 m - 不会误匹配的内容:单独的
m、m17、17m、100m、m 100、18 m 20
内容的提问来源于stack exchange,提问作者Michael Mooney
相关产品推荐
相关产品推荐

