String camelCasePattern = "([a-z][A-Z0-9]+)+";
boolean val = "camelCase".matches(camelCasePattern);
System.out.println(val);
以上输出为false。我试图匹配以小写字母开头的驼峰命名模式。虽然我尝试进行了一些调整,但仍然没有成功。这个驼峰命名模式有问题吗?
String camelCasePattern = "([a-z]+[A-Z]+\\w+)+"; // 3rd edit, getting better
System.out.println("camelCaseCaseCCase5".matches(camelCasePattern));
输出
true
您当前的Pattern
匹配一个小写字母后面跟随零个或多个大写字母/数字,多次重复这种模式,这就是为什么它返回false
的原因。
0-9
替换为 \\d
。 - Amit Joki(…) +
。 - brillenheini此正则表达式支持所有这些要求:
String camelCasePattern = "^[a-z][a-z0-9]*(([A-Z][a-z0-9]+)*[A-Z]?|([a-z0-9]+[A-Z])*|[A-Z])$";
测试用例:https://regex101.com/library/8nQras
有关驼峰命名法和帕斯卡命名法的更多详细信息,请查看此存储库。
匹配测试用例的最佳方式是:
String camelCasePattern = "^[a-z]+([A-Z][a-z0-9]+)+";
这将确保它以小写字母开头,然后有一个重复的模式,即一个大写字母,后跟一些小写字符。
匹配 camelCaseTest
但不匹配 camelCaseDOneWrong
[A-Za-z]
。[a-z]
。[A-Z]
。// TEST.java 20140529_0900
import java.util.regex.*;
public class TEST {
public static void main(String[] args) {
String data = "This has one camelCase word."+
"This hasTwo camelCaseWords."+
"NON CamelCase withDigits123 words.";
Pattern re_camel_case_word = Pattern.compile(
" # Match one camelCase word.\n" +
" \\b # Anchor to word boundary. \n" +
" [a-z]+ # Begin with one or more lowercase alphas. \n" +
" (?: # One or more parts starting with uppercase. \n" +
" [A-Z] # At least one uppercase alpha \n" +
" [a-z]* # followed by zero or more lowercase alphas. \n" +
" )+ # One or more parts starting with uppercase. \n" +
" \\b # Anchor to word boundary.",
Pattern.COMMENTS);
Matcher matcher = re_camel_case_word.matcher(data);
while (matcher.find())
System.out.println(matcher.group(0));
}
}
String camelCasePattern = "([a-z]+[a-zA-Z0-9]+)+";
。([a-z]+)([A-Z][a-z]*)*
或([a-z]+)([A-Z][a-z]+)*
。^[a-z]+([A-Z][a-z0-9]+)*$
匹配成功: small smallLarge smallLargeLarge smallA1
未匹配成功: smallLARGE camelCaseDOneWrong camelCaseDWHDone
+
吗? - devnull