Java正则表达式匹配字符前后的空格

3

我想验证一个输入字段的正则表达式。

这个问题是这个问题的延续,但我犯了一个错误,所以问题有些改变,因此我创建了一个新的问题。

这是我的java正则表达式:

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

演示

我试图匹配的模式是:

  • 至少2个字母数字字符(不包括“?”和“*”)
  • “*”只能出现一次,并且在字符串末尾
  • “?”可以多次出现
  • 不能以空格开头
  • “?”或“*”前后不能有空格

例如:

  • abcd = 符合条件
  • ?bcd = 符合条件
  • ab?? = 符合条件
  • ab*= 符合条件
  • ab?* = 符合条件
  • ??cd = 符合条件
  • ab cd = 符合条件
  • *ab = 不符合条件
  • a ? b = 不符合条件
  • ??? = 不符合条件
  • ab? cd = 不符合条件
  • ab ?d = 不符合条件
  • ab * = 不符合条件
  • abcd = 不符合条件(开头有空格)

正如我在第一个问题中提到的,我的正则表达式现在不允许任何空格,但这不是我想要的,我有点迷失了,请你帮帮我好吗?


1
a b(中间有空格)可以吗?a?b(没有空格)可以吗? - Ole V.V.
是的(a?b = 可行)(ab cd = 可行)(a bcd = 可行)(a b = 可行) - Matt Zdj
一个或多个空格都可以,但不要在 '*' 或 '?' 的前面或后面,也不要在开头。 - Matt Zdj
1个回答

2
你可以使用:

^(?!\s)(?!.*\s[*?])(?!.*[*?]\s)(?:[?\s]*[a-zA-Z0-9]){2}[a-zA-Z0-9?\s]*\*?$

请查看正则表达式示例
使用注意事项:如果您在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个或多个字母、数字、?或空格 - *? - 可选的?字符 - $ - 字符串的结尾。

1
非常感谢!再好不过了! - Matt Zdj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接