Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式匹配以constatant开头的字符串_Java_Regex - Fatal编程技术网

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


上面的正则表达式根据和方法检查字符。

不会编译。使用\\我认为一个``符号就足够了,不是吗?不,这个``符号也必须转义。在发布答案之前,请先自己尝试一下。:-)它也可以是数字??