Регулярное выражение для соответствия последовательности символов - PullRequest
1 голос
/ 07 апреля 2011

Мне нужно регулярное выражение, чтобы соответствовать последовательности символов, составляющих запрос.Пример моего определения запроса выглядит следующим образом: и (кошка, собака) В более общем определении он может быть представлен как оператор (операнд, операнд) Он состоит из оператора, который содержит 2 операнда.Операндами может быть любое отдельное слово ALPHABETIC (не числовое) или даже другой подзапрос.и пример: и (козел, или (зебра, медведь)) Операторы: И, ИЛИ, НЕ , и запрос может получить все больше и больше ЯВЛЯЕТСЯ до такой степени, насколько это возможно.В запросе нет WHITESPACE , и мне нужно регулярное выражение для использования в приложении Java.Примечание. Оператор NOT может иметь только один операнд, например not (тигр) .Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Подзапрос как операнд делает это невозможным.Регулярные выражения недостаточно мощны для вложенных вещей, вам нужно использовать контекстно-свободные грамматики.

0 голосов
/ 07 апреля 2011

Ваша проблема может быть намного сложнее, и трудно угадать ваше точное направление. Тем не менее, этот простой пример Java может быть хорошей отправной точкой для вас:


import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test { 

  public static void main(String[] args) {
    String s = "add(1,sub(2,3))";
    Pattern p = Pattern.compile("(.*?)\\((.*)\\)");
    Matcher m1 = p.matcher(s);
    if (m1.matches()) {
      System.out.println(m1.group(1));
      System.out.println(m1.group(2));
    }
    System.out.println();
    Matcher m2 = p.matcher(m1.group(2));
    if (m2.matches()) {
      System.out.println(m2.group(1));
      System.out.println(m2.group(2));
    }
  }
}

Производит вывод как:


add
1,sub(2,3)

1,sub
2,3

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