Java 正则表达式匹配 space 字符之前或之后

Java Regex match space before or after characters

我尝试使用正则表达式验证输入字段。

这道题是的延续题,但是我犯了一个错误,题目改了一点,所以我创建了一道新题。

这是我的 java 正则表达式:

^(?:\?*[a-zA-Z\d]){2}[a-zA-Z\d?]*\*?$

Demo

我要匹配的是:

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 个或多个字母、数字、? 或空格
  • \*? - 一个可选的 ? 字符
  • $ - 字符串结尾。