Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式a-z 0-9,但不仅仅是数字_Java_Regex - Fatal编程技术网

Java 正则表达式a-z 0-9,但不仅仅是数字

Java 正则表达式a-z 0-9,但不仅仅是数字,java,regex,Java,Regex,尝试仅匹配长度为10-30个字符的字符串,字符串中仅包含a-z和0-9(但不包括数字)。似乎可以工作,除非字符串以数字开头,然后失败。 不确定\D应该修复的不仅仅是数字 static final Pattern UNIQUE_ID_PATTERN = Pattern.compile("^\\D[A-Za-z0-9_-]{10,30}$"); UNIQUE_ID_PATTERN.matcher("1eeeeeeeee333e").matches(); // Does not work UNIQUE

尝试仅匹配长度为10-30个字符的字符串,字符串中仅包含a-z和0-9(但不包括数字)。似乎可以工作,除非字符串以数字开头,然后失败。 不确定\D应该修复的不仅仅是数字

static final Pattern UNIQUE_ID_PATTERN = Pattern.compile("^\\D[A-Za-z0-9_-]{10,30}$");
UNIQUE_ID_PATTERN.matcher("1eeeeeeeee333e").matches(); // Does not work
UNIQUE_ID_PATTERN.matcher("eeeeeeeee333e").matches(); // Works

\D
速记类表示
任何非数字符号
。您应该将其从模式中删除(使其成为
“^[A-Za-z0-9_-]{10,30}$”
),以便
匹配返回true,因为
1
1EEE333E
中的一个数字

如果要放置限制(字符串不能仅由数字组成),请使用锚定的前瞻:

^(?![0-9]+$)[A-Za-z0-9_-]{10,30}$
这是

或者,使用
i
修饰符使模式不区分大小写的缩短版本:

(?i)^(?![0-9]+$)[A-Z0-9_-]{10,30}$

另一种方式:
^(?=(?:.[a-zA-Z])+)([a-zA-Z\d]{10,30})$
更新


我用一个版本更新了答案,不允许只使用数字字符串。很好+1对于负面展望,我建议你阅读。它非常有用。这不是JavaScript,请参阅post标记。在Java中,不能像在JavaScript或PHP中那样使用正则表达式分隔符。