gpt4 book ai didi

java - 字符串必须只包含 [a-zA-Z0-9_] 符号(可以是一个字母但不是 "_"),不能从数字开始

转载 作者:行者123 更新时间:2023-11-29 04:07:18 24 4
gpt4 key购买 nike

我正在用 Java 解决一个问题,需要制作一个正则表达式,它会检查下一个规则的字符串:

  1. 字符串只能包含数字、大小写字母和下划线"_";
  2. 字符串不能以数字开头;
  3. 如果字符串以下划线开头,则第二个字符不能是下划线,即必须是数字或字母;
  4. 字符串只能由一个字符组成,但这个字符不能是下划线;

我不明白如何制作正则表达式的第一部分。我试着把它一部分一部分地制作出来:

  1. 表达式 "_[a-zA-Z0-9]" 满足条件“如果字符串从下划线字符开始,则第二个字符是字母或数字”。
  2. 表达式 "\\D" 满足条件“String must not start from a digit”。
  3. 表达式 [a-zA-Z]" 满足条件“String starts from an uppercase or lowercase letter”。

表达式的最后一部分很简单 - "w*"

当我尝试将所有这些放在一起时 "(_[a-zA-Z0-9])*|(\\D)*|([a-zA-Z])*w*",获取的正则表达式不能正常工作。

以下字符串 b33_n1 不适合我的正则表达式,但字符串 __ 适合它。

如何修复我的正则表达式?

最佳答案

你可以使用

^(?![0-9]|__|_$)[a-zA-Z0-9_]+$

或者,使用简写:

^(?!\d|__|_$)\w+$

参见 regex demo

详情

  • ^ - 字符串的开始(隐含在 .matches() 中)
  • (?![0-9]|__|_$) - 紧随其后,不能有数字或 __ 子串,或 _ 后跟字符串结尾
  • [a-zA-Z0-9_]+ - 1+ ASCII 字母、数字或 _(使用 * 匹配空字符串)
  • $ - 字符串结尾(隐含在 .matches() 中)。

在 Java 中,将它与 .matches() 一起使用,省略 anchor :

s.matches("(?!\\d|__|_$)\\w+")

关于java - 字符串必须只包含 [a-zA-Z0-9_] 符号(可以是一个字母但不是 "_"),不能从数字开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57801221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com