Java 正则表达式匹配以constatant开头的字符串
我有一个类似于Java 正则表达式匹配以constatant开头的字符串,java,regex,Java,Regex,我有一个类似于com.sap.fw.tr.SYSTEM.GKBN的字符串,其中GKBN是可变的,而其余部分是固定的。我曾经 Pattern p = Pattern.compile("^com.sap.fw.tr.SYSTEM.([a-z]*)$"); 但是当我调用Matcher.matches()时返回false。 有人能指出这个正则表达式中的错误吗?您正在将大写输入与只匹配小写字母的[a-z]*匹配 用这个 ^com\\.sap\\.fw\\.tr\\.SYSTEM\\.([A-Z]*)
com.sap.fw.tr.SYSTEM.GKBN
的字符串,其中GKBN
是可变的,而其余部分是固定的。我曾经
Pattern p = Pattern.compile("^com.sap.fw.tr.SYSTEM.([a-z]*)$");
但是当我调用Matcher.matches()时代码>返回false
。
有人能指出这个正则表达式中的错误吗?您正在将大写输入与只匹配小写字母的[a-z]*
匹配
用这个
^com\\.sap\\.fw\\.tr\\.SYSTEM\\.([A-Z]*)
我已经在regexplanet.com上测试过了。成功了!如果要使其不区分大小写。您可以使用?i
忽略大小写匹配。您正在匹配大写输入,并且具有只匹配小写字母的[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)
用于忽略大小写匹配尝试使用:
("^com\\.sap\\.fw\\.tr\\.SYSTEM\\.([A-Z]+)$");
它只使用一个或多个大写字母。最好使用
符号进行转义。
如果要匹配有效的Java标识符,这是最严格的解决方案:
inputString.matches("\\Qcom.sap.fw.tr.SYSTEM.\\E\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*");
这使用String.matches(String regex)
而不是通过类
模式的分解:
\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
classes特性,在java.lang.Character
类中,在方法名称前面加上java
上面的正则表达式根据和方法检查字符。不会编译。使用\\我认为一个``符号就足够了,不是吗?不,这个``符号也必须转义。在发布答案之前,请先自己尝试一下。:-)它也可以是数字??