我尝试让正则表达式验证输入字段。
此问题是 this question 的继续,但我犯了一个错误,并且问题有所改变,因此我创建了一个新问题。
这是我的Java正则表达式:
^(?:\?*[a-zA-Z\d]){2}[a-zA-Z\d?]*\*?$
我想匹配的是:
例如:
- abcd =确定
- ?bcd =确定
- ab ??? =确定
- ab * =确定
- ab?* =确定
- ?? cd =好
- ab cd =确定
- * ab =不合适
- a? b =不好
- ??? =不好
- ab? cd =不正确
- ab?d =不正确
- ab * =不正确
- abcd =不正确(开头是空格)
正如我在fisrt问题中所问的那样,正则表达式中现在完全不允许使用空格,但这不是我想要的,我有点迷茫了,您能帮我吗?
答案 0 :(得分:2)
您可以使用
^(?!\s)(?!.*\s[*?])(?!.*[*?]\s)(?:[?\s]*[a-zA-Z0-9]){2}[a-zA-Z0-9?\s]*\*?$
请参见regex demo。
用法说明:如果将其与Java的.matches()
方法一起使用,则可以从模式中删除^
和$
。请记住在字符串文字中将转义的反斜杠加倍。
详细信息
^
-字符串的开头(?!\s)
-不允许在右边(在字符串的开头)使用空格(?!.*\s[*?])
-在*
或?
之前,尽可能多的0个字符之后,不允许有空格。(?!.*[*?]\s)
-在*
或?
之后,尽可能多的0个字符后不允许有空格(?:[?\s]*[a-zA-Z0-9]){2}
-两个序列
[?\s]*
-0个或更多?
或/和空格[a-zA-Z0-9]
-一个字母数字字符[a-zA-Z0-9?\s]*
-0个或更多字母,数字,?
或空格\*?
-可选的?
字符$
-字符串的结尾。