Java 正则表达式匹配 space 字符之前或之后
Java Regex match space before or after characters
我尝试使用正则表达式验证输入字段。
这道题是 的延续题,但是我犯了一个错误,题目改了一点,所以我创建了一道新题。
这是我的 java 正则表达式:
^(?:\?*[a-zA-Z\d]){2}[a-zA-Z\d?]*\*?$
我要匹配的是:
- 至少 2 个字母数字字符(“?”和“*”除外)
- '*'只能出现一次并且在字符串的末尾
- '?'可以出现多次
- 开头没有空格
- “?”之前或之后没有空格或'*'
So for exemple :
- abcd = OK
- ?bcd = OK
- ab?? = OK
- ab*= OK
- ab?* = OK
- ??cd = OK
- ab cd = OK
- *ab = NOT OK
- a ? b =NOT OK
- ??? = NOT OK
- ab? cd = NOT OK
- ab ?d = NOT OK
- ab * = NOT OK
- abcd = NOT OK (space at the begining)
正如我在第一个问题中所问的,现在我的正则表达式中根本不允许使用白色 space 但这不是我想要的,我有点迷茫你能帮帮我吗?
您可以使用
^(?!\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 个或更多 ?
or/and 空格
[a-zA-Z0-9]
- 字母数字字符
[a-zA-Z0-9?\s]*
- 0 个或多个字母、数字、?
或空格
\*?
- 一个可选的 ?
字符
$
- 字符串结尾。
我尝试使用正则表达式验证输入字段。
这道题是
这是我的 java 正则表达式:
^(?:\?*[a-zA-Z\d]){2}[a-zA-Z\d?]*\*?$
我要匹配的是:
- 至少 2 个字母数字字符(“?”和“*”除外)
- '*'只能出现一次并且在字符串的末尾
- '?'可以出现多次
- 开头没有空格
- “?”之前或之后没有空格或'*'
So for exemple :
- abcd = OK
- ?bcd = OK
- ab?? = OK
- ab*= OK
- ab?* = OK
- ??cd = OK
- ab cd = OK
- *ab = NOT OK
- a ? b =NOT OK
- ??? = NOT OK
- ab? cd = NOT OK
- ab ?d = NOT OK
- ab * = NOT OK
- abcd = NOT OK (space at the begining)
正如我在第一个问题中所问的,现在我的正则表达式中根本不允许使用白色 space 但这不是我想要的,我有点迷茫你能帮帮我吗?
您可以使用
^(?!\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 个或更多?
or/and 空格[a-zA-Z0-9]
- 字母数字字符
[a-zA-Z0-9?\s]*
- 0 个或多个字母、数字、?
或空格\*?
- 一个可选的?
字符$
- 字符串结尾。