我是这个正则表达式的新手。我正在尝试编写一个正则表达式来匹配遵循这些规则的标识符:
它必须以字母开头,并且只能包含字母、数字和下划线。标识符还必须以字母结尾,并且不能有两个连续的下划线。
我试图为此提出正则表达式,但我没有取得太大的成功。我需要帮助。
使用正则表达式模式
\b[a-zA-Z](?:[a-zA-Z\d]|(?<!_)_(?!_))*[a-zA-Z]\b
如果您还想添加最小和最大长度(例如最小 6 和最大 12),请使用
\b(?=\w{6,12}\b)[a-zA-Z](?:[a-zA-Z\d]|(?<!_)_(?!_))*[a-zA-Z]\b
这是我可以做的样本
public static void main(String[] args) {
System.out.println(test("a"));
System.out.println(test("a_a"));
System.out.println(test("a2_f"));
System.out.println(test("a_2f"));
System.out.println(test("a2_fasd"));
System.out.println(test("dsads_dsadsa"));
System.out.println(test("d_sads_dsads_a"));
System.out.println(test("a2_3241_4324_2f"));
//fails
System.out.println(test("2_3241_4324_2f"));
System.out.println(test("a2_3241__4324_2f"));
System.out.println(test("_dsads_dsadsa"));
System.out.println(test("dsads_dsadsa_"));
}
//validation
public static boolean test(String name) {
String regEx = "^[a-zA-Z](_?[a-zA-Z0-9]+)*_?[a-zA-Z]$||^[a-zA-Z]([a-zA-Z0-9]+_?)*[a-zA-Z]$||^[a-zA-Z]_[a-zA-Z]$||^[a-zA-Z]$";
return Pattern.matches(regEx, name);
}
------------------------
Printed results
true
true
true
true
true
true
true
true
false
false
false
false