java - 使正则表达式因无效输入而失败
问题描述
在 Java 中使用正则表达式进行验证后,我需要为具有值的高度返回 true:
- 80厘米
- 80.2cm
- 80.25cm
我的正则表达式如下:
(\d)(\d?)(.?)(\d?)(\d?)(c)(m)
但是,如果我将 height 作为71-80cm传递,则正则表达式也会返回true。
当高度为71-80cm时,我应该对正则表达式进行哪些更改以返回 false ?
解决方案
我假设 OP 希望匹配表单的子字符串
abcm
在哪里:
"cm"
是字面量;"cm"
后面没有字母;"b"
是非负浮点数或整数的字符串表示形式(例如,"80"
或"80.25"
,但不是"08"
或".25"
);和"a"
是除 , 之外的字符"-"
,"+"
并且"."
, 除非"b"
在字符串的开头,在这种情况下"a"
是空字符串。
如果我的假设是正确的,您可以使用以下正则表达式来b
匹配abcm
:
(?<![-+.\d])[1-9]\d*(?:\.\d+)?cm(?![a-zA-Z])
正则表达式引擎执行以下操作:
(?<! # begin negative lookbehind
[-+.\d] # match '-', '+', '.' or a digit
) # end negative lookbehind
[1-9] # match digit other than zero
\d* # match 0+ digits
(?:\.\d+) # match '.' followed by 1+ digits in a non-cap grp
? # optionally match non-cap grp
cm # match 'cm'
(?![a-zA-Z]) # match a letter in a negative lookahead
如果我对所需内容的假设不正确,那么如何适当调整我的答案可能很明显。
推荐阅读
- node.js - 基本 Firebase 函数运行时出现错误“ReferenceError:请求未定义”
- python - 如何访问发送到 asgi 应用程序的可调用的 HTTP/2 流 ID?
- mysql - 无法从sts连接mysql
- javascript - 如何存储和编辑带有国家代码的手机号码?
- ios - 当我只创建一个时,为什么会有多个 SKSpriteNode 和 SKAudioNode 对象?
- maven - Maven deploy 创建两个不同的 sonatype 存储库
- swift - 使用 UIImage(contentsOfFile: ) 时获取 EXC_BAD_ACCESS
- django - 在 django url dispatcher 中使用 Handler404 导致服务器错误
- load-balancing - 我需要更多资源还是需要负载均衡器?
- sql - 如何在子字符串 SQL 中搜索特殊字符