Java Regexp обсуждение - PullRequest
       0

Java Regexp обсуждение

0 голосов
/ 08 ноября 2011

У меня есть этот текст, который выглядит так:

executeRule(document, 'SendEmail', [
    'emailAddress':'EMAIL(john@yahoo.com)',
    'subject':'Test',
    'text':'Test',
    'defaultText':'Test']
);

Мне нужно проанализировать его с помощью регулярного выражения, чтобы получить параметры для executeRule.

В настоящее время мое регулярное выражение выглядит следующим образом (Java):

List<String> partialRules = new ArrayList<String>();
        List<String> rules = new ArrayList<String>();
        Pattern p = Pattern.compile("executeRule\\(\\s*\\w+,\\s*'(\\w+)'\\s*,\\.*");

Проблема в том, что я не могу найти регулярное выражение, которое будет соответствовать моему 3-му параметру метода executeRule.

Любая помощь приветствуется.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 08 ноября 2011

Задумывались ли вы не об использовании одного регулярного выражения для выполнения всего вышеперечисленного, а о написании простого парсера для разделения на запятые, а затем делегировании другому парсеру для разбора каждой пары, разделенной двоеточиями? Это может быть легче построить / отладить (в зависимости от того, разрешаете ли вы запятые в каждой текстовой строке, конечно).

Если вы решите расширить указанный выше синтаксис, то это может быть более расширяемым, чем одно (возможно, значительное) регулярное выражение.

1 голос
/ 08 ноября 2011
Pattern p = Pattern.compile("(?s)executeRule\\(\\s*?(.+?),\\s*?('.+?'),\\s*(\\[.+?\\])");

Если я правильно понимаю, что вы хотите. Каждый аргумент будет сохранен в группе (i) Matcher.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...