我尝试使用正则表达式来验证输入字段。 我所说的“ clown ”字符是“?”和 '*'。 这是我的 java 正则表达式:
"^$|[^\\*\\s]{2,}|[^\\*\\s]{2,}[\\*\\?]|[^\\*\\s]{2,}[\\?]{1,}[^\\s\\*]*[\\*]{0,1}"
我要匹配的是:
- 至少 2 个字母数字字符(“?”和“*”除外)
- “*”只能出现一次,并且出现在字符串末尾
- “?”可以出现多次
- 完全没有空格
例如:
- abcd = OK
- ?bcd = OK
- ab?? = OK
- ab*= OK
- ab?* = OK
- ??cd = OK
- *ab = NOT OK
- ??? = NOT OK
- ab cd = NOT OK
- abcd = Not OK (space at the begining)
我把正则表达式弄得有点复杂了,我迷路了,你能帮我吗?
最佳答案
^(?:\?*[a-zA-Z\d]\?*){2,}\*?$
说明:
正则表达式断言此模式必须出现两次或以上:
\?*[a-zA-Z\d]\?*
它断言[a-zA-Z\d]
类中必须有一个字符,其左侧或右侧有0到无穷大的问号。
然后,正则表达式匹配 \*?
,这表示字符串末尾有 0 或 1 个星号字符。
Demo
这是一个更快的替代正则表达式,正如评论中建议的那样:
^(?:\?*[a-zA-Z\d]){2}[a-zA-Z\d?]*\*?$
Demo
关于带有 "Joker"字符的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51783464/