带有 "Joker"字符的 Java 正则表达式

标签 java regex metacharacters

我尝试使用正则表达式来验证输入字段。 我所说的“ 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/

相关文章:

Java 正则表达式元字符在拆分时返回额外的空间

regex - 如何在perl中匹配包含精确3次出现特殊字符的字符串

java - 如何使用 SAX 获取 xml 标记的正确开始/结束位置?

java - 如何解决 java.net.MalformedURLException : no protocol:?

java - JSONObject 键顺序反转

java - 将 ArrayList 中的字符串分配给 Java Array 时出现 NullPointerException

python - 使用 Python 正则表达式查找两个变量之间的 HTML

.net - Regex.IsMatch 与 string.Contains

regex - 查找重复标记的子字符串

regex - 悬空元字符 * spark sql