我有一个像com.sap.fw.tr.SYSTEM.GKBN
这样的字符串,其中GKBN
是可变的,而休息部分是固定的。我用了
Pattern p = Pattern.compile("^com.sap.fw.tr.SYSTEM.([a-z]*)$");
但是当我呼叫Matcher.matches();
时,它正在返回false
。
有人能指出这个正则表达式中的错误吗?
答案 0 :(得分:2)
您正在匹配大写输入,并且[a-z]*
仅匹配小写字母。
试试这个:
Pattern p = Pattern.compile("(?i)^com\\.sap\\.fw\\.tr\\.SYSTEM\\.([a-z]*)$");
或者这个:
Pattern p = Pattern.compile("^com\\.sap\\.fw\\.tr\\.SYSTEM\\.([a-z]*)$",
Pattern.CASE_INSENSITIVE);
(?i)
用于忽略大小写匹配
答案 1 :(得分:0)
您将大写输入与[a-z]*
匹配,仅匹配小写字母。
使用此
^com\\.sap\\.fw\\.tr\\.SYSTEM\\.([A-Z]*)
我在regexplanet.com上对此进行了测试。有效!如果你想使不区分大小写。您可以使用?i
忽略大小写匹配。
答案 2 :(得分:0)
尝试使用:
("^com\\.sap\\.fw\\.tr\\.SYSTEM\\.([A-Z]+)$");
它只使用大写字母一个或多个。最好使用.
\.
符号
答案 3 :(得分:0)
如果要匹配有效的Java标识符,这是最严格的解决方案:
inputString.matches("\\Qcom.sap.fw.tr.SYSTEM.\\E\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*");
这使用String.matches(String regex)
而不是通过Pattern
类。
分解模式:
\Qcom.sap.fw.tr.SYSTEM.\E # Match literal string "com.sap.fw.tr.SYSTEM."
\p{javaJavaIdentifierStart} # Match 1 - starting character of a Java identifier
\p{javaJavaIdentifierPart}* # Match 0 or more - part characters of a Java identifier
此模式使用java.lang.Character
类功能,您可以在java
类中的方法名称前面添加java.lang.Character
。
上面的正则表达式根据Character.isJavaIdentifierStart
和Character.isJavaIdentifierPart
方法检查字符。