-1

我是这个正则表达式的新手。我正在尝试编写一个正则表达式来匹配遵循这些规则的标识符:

它必须以字母开头,并且只能包含字母、数字和下划线。标识符还必须以字母结尾,并且不能有两个连续的下划线。

我试图为此提出正则表达式,但我没有取得太大的成功。我需要帮助。

4

2 回答 2

1

使用正则表达式模式

\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
于 2012-09-22T20:11:52.603 回答
0

这是我可以做的样本

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
于 2012-09-22T20:13:30.553 回答