正则表达式匹配以constatant开头的字符串

时间:2014-02-05 11:31:20

标签: java regex

我有一个像com.sap.fw.tr.SYSTEM.GKBN这样的字符串,其中GKBN是可变的,而休息部分是固定的。我用了

Pattern p = Pattern.compile("^com.sap.fw.tr.SYSTEM.([a-z]*)$");

但是当我呼叫Matcher.matches();时,它正在返回false。 有人能指出这个正则表达式中的错误吗?

4 个答案:

答案 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.isJavaIdentifierStartCharacter.isJavaIdentifierPart方法检查字符。