Java Регулярные выражения - PullRequest
       1

Java Регулярные выражения

1 голос
/ 07 сентября 2011

Я пытаюсь разобрать следующее с помощью регулярных выражений в Java.

Моя тестовая строка состоит из строк в "${}", как например: "Test ${template} in ${xyz} : ${abc}"

Я пытаюсь использоватьрегулярное выражение формы (\$\{[^\}]+\}), чтобы соответствовать ему.Текущее регулярное выражение не совпадает ни с чем в тестовой строке.

Если я добавлю (.*?)(\$\{[^\}]+\})(.*?), чтобы сделать его несвязным, это действительно не всегда дает мне то, что я хочу сопоставить.

В чем проблема с моим регулярным выражением?Как мне это исправить?

Ответы [ 6 ]

6 голосов
/ 07 сентября 2011

В большинстве случаев, когда кто-то задает вопросы по регулярному выражению, я задаю ему хотя бы вопрос Commons Lang StringUtils :

String[] names = substringsBetween(theString, "${", "}");
4 голосов
/ 07 сентября 2011
public static void main(String[] args) throws Exception {

    String test = "Test ${template} in ${xyz} : ${abc}";

    Matcher m = Pattern.compile("\\$\\{[^\\}]+\\}").matcher(test);

    while (m.find())
        System.out.println(m.group());
}

Выходы:

${template}
${xyz}
${abc}
1 голос
/ 07 сентября 2011
    String test = "Test ${template} in ${xyz} : ${abc}";
    Pattern p = Pattern.compile("\\$\\{[^}]+\\}");
    Matcher matcher = p.matcher(test);
    while (matcher.find()) {
        System.out.println(matcher.group());
    }
1 голос
/ 07 сентября 2011

Возможно, вам также придется избежать скобок:

jcomeau@intrepid:/usr/src/clusterFix$ python
Python 2.6.7 (r267:88850, Jun 13 2011, 22:03:32) 
[GCC 4.6.1 20110608 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> s = 'Test ${template} in ${xyz} : ${abc}'
>>> re.compile('\$\{[^}]+\}').findall(s)
['${template}', '${xyz}', '${abc}']
0 голосов
/ 26 июня 2012

Одной косой черты недостаточно.Вам нужны две косые черты.

Попробуйте это регулярное выражение:

\\$\\{.+\\}

Он проверяет строки с $ {и} окружающим текстом.Это отфильтровывает пустые строки (${}) и все, что не закрыто должным образом.

Если вы хотите проверить текст перед и позади, попробуйте .+\\$\\{.+\\}.+

0 голосов
/ 07 сентября 2011
        String ip="Test ${template} in ${xyz}";
        Pattern p = Pattern.compile("\\{.*?\\}");
        Matcher m =p.matcher(ip);
        while(m.find())
        {
            System.out.println(m.group());
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...