私はこの正規表現の初心者です。次の規則に従う識別子に一致する正規表現を作成しようとしています。
文字で始まる必要があり、文字、数字、およびアンダースコアのみを使用できます。識別子も文字で終わる必要があり、2 つの連続したアンダースコアを使用することはできません。
このための正規表現を考え出そうとしましたが、あまり成功していません。私は助けが必要です。
正規表現パターンを使用
\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