正则表达式量词java

正则表达式量词java,java,regex,Java,Regex,根据我的理解,此表达式将匹配最少8个字符,最多30个字符的单词,该单词以字母字符开头,只能包含字母数字字符或/和下划线 但它也与下面的单词匹配。 “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b” 有人能帮我理解这一点吗?正则表达式匹配9到31个字符 ^\\p{Alpha}[\

根据我的理解,此表达式将匹配最少8个字符,最多30个字符的单词,该单词以字母字符开头,只能包含字母数字字符或/和下划线

但它也与下面的单词匹配。 “aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b”


有人能帮我理解这一点吗?正则表达式匹配9到31个字符

^\\p{Alpha}[\\p{Alnum}_]{8,30}$
使用

仅匹配8到30个字符

请注意Java中的用法:

^\\p{Alpha}[\\p{Alnum}_]{7,29}$

不,它匹配一个9到31个字符的单词。@T.J.Crowder:如果你的意思是,它是一个用于结束“请向我解释这个正则表达式”问题的标准单词。有时,它也被滥用来关闭其他问题。它是否可以用量词{8,30}来表示整个正则表达式?@YashodaAgrawal:不,不是因为第一个字符和后面的字符之间的区别。嗯,不合理。这个表达很好,很清楚。用lookaheads可以在一个非捕获组或其他对象周围使用一个量词,但如果可能的话,它会复杂得多。你可以用lookahead来实现这一点,但为什么呢
^(?=\\p{Alpha})[\\p{Alnum}}{8,30}$
请忘记添加:如果您在
String#matches
中使用正则表达式,则可以从模式中删除
^
$
^\\p{Alpha}[\\p{Alnum}_]{7,29}$
String pat = "^\\p{Alpha}[\\p{Alnum}_]{7,29}$";