Регулярный текст

1

Я пытаюсь создать правильно регулярное выражение для проверки некоторых значений, я объясню следующее:

Я должен проверить эти строки с помощью:

$_globalVariables/ns:GlobalVariables/VARIABLENAME/ESB/System
$_globalVariables/ns:GlobalVariables/VARIABLENAME2/ESB/System
$_globalVariables/ns:GlobalVariables/VARIABLENAME3/ESB/System

С этой строкой:

$_globalVariables/ns:GlobalVariables/[varname]/ESB/Sistema

Я пробовал некоторые комбинации и читал о регулярном выражении, но я "новичок" в этой теме, и я не могу получить правильный результат.

Я думаю, что это примерно так:

\$_globalVariables/ns:GlobalVariables/(.*?)/ESB/System
  • \$_globalVariables/ns:GlobalVariables/ → Текст для проверки в начале
  • (.*?) → Все
  • /ESB/System → Конец математического текста

Извините мой английский, если кому-то нужна дополнительная информация, пожалуйста, спросите меня.

Теги:

1 ответ

3
Лучший ответ

Вам нужно избежать символа $, поскольку он зарезервированный символ означает конец строки/ввода в соответствии с контекстом.

Вот как:

String[] input = {
            "$_globalVariables/ns:GlobalVariables/VARIABLENAME/ESB/System",
            "$_globalVariables/ns:GlobalVariables/VARIABLENAME2/ESB/System",
            "$_globalVariables/ns:GlobalVariables/VARIABLENAME3/ESB/System" };
Pattern p = Pattern.compile("^\\$_globalVariables/ns:GlobalVariables/(.+?)/ESB/System");
for (String s: input) {
    Matcher m = p.matcher(s);
    if (m.find()) {
        System.out.println("Found: " + m.group());
        System.out.println("\t with variable name: " + m.group(1));
    }
}

Вывод

Found: $_globalVariables/ns:GlobalVariables/VARIABLENAME/ESB/System
 with variable name: VARIABLENAME
Found: $_globalVariables/ns:GlobalVariables/VARIABLENAME2/ESB/System
     with variable name: VARIABLENAME2
Found: $_globalVariables/ns:GlobalVariables/VARIABLENAME3/ESB/System
     with variable name: VARIABLENAME3

Заметки

  • $ - двойное экранирование в Pattern\\$
  • Использование 1+ неохотного квантификатора вместо 0+ неохотного квантификатора для группы 1: мы предполагаем по крайней мере один символ в имени переменной, правильно?
  • API Pattern Java здесь
  • 0
    Берегись .... вопрос меняется на тебя -.-
  • 1
    @OGHaza Ухх. Спасибо! Хотя, похоже, мой ответ все еще в силе, я думаю ... (примечание: измененный ответ для отражения захвата группы)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню