2014-02-05 3 views
0

У меня есть строка, такая как com.sap.fw.tr.SYSTEM.GKBN, где GKBN является переменной, в то время как часть отдыха фиксирована. Я использовалRegex соответствует строке, начинающейся с константы

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

но когда я звоню Matcher.matches(); она возвращается false. Может кто-нибудь указать на ошибку в этом регулярном выражении?

+0

Вместо этого используйте '[A-Z ]'. –

+0

это может быть число также ?? – Amitesh

ответ

0

Вы соответствуете входному регистру верхнего регистра с [a-z]*, который будет соответствовать только строчным буквам.

Используйте этот

^com\\.sap\\.fw\\.tr\\.SYSTEM\\.([A-Z]*) 

Я испытал это в regexplanet.com. это сработало! если вы хотите сделать регистр нечувствительным. Вы можете использовать ?i, чтобы игнорировать соответствие случаев.

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) используется для игнорирования регистра соответствия

0

Попробуйте использовать:

("^com\\.sap\\.fw\\.tr\\.SYSTEM\\.([A-Z]+)$"); 

это использовать только заглавные буквы Летте r один или несколько. И лучше бежать . символ с \.

+0

Не компилируется. Использовать \\ –

+0

Я думаю, что одного символа '\\' достаточно, не так ли? –

+0

Нет, символ '\\' также должен быть экранирован. Перед отправкой ответа сначала попробуйте сами. :-) –

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.

Смежные вопросы