Соответствие шаблону Java - PullRequest
       22

Соответствие шаблону Java

0 голосов
/ 27 сентября 2010

У меня длинный шаблон, из которого мне нужно извлечь определенные строки на основе определенных шаблонов.Проходя через несколько примеров, я обнаружил, что использование квантификаторов хорошо в таких ситуациях. Например, следующий шаблон - мой шаблон, из которого мне нужно извлечь while и doWhile.

This is a sample document.
$while($variable)This text can be repeated many times until do while is called.$endWhile.
Some sample text follows this.
$while($variable2)This text can be repeated many times until do while is called.$endWhile.
Some sample text.

извлечь весь текст, начиная с $while($variable) до $endWhile.Затем мне нужно обработать значение переменной $.После этого мне нужно вставить текст между $while и $endWhile в исходный текст.У меня есть логика извлечения переменной.Но я не уверен, как использовать квантификаторы или сопоставление с образцом здесь.Может кто-нибудь предоставить мне пример кода для этого?Любая помощь будет принята с благодарностью

Ответы [ 2 ]

3 голосов
/ 27 сентября 2010

Вы можете использовать довольно простое решение на основе регулярных выражений здесь с Matcher:

Pattern pattern = Pattern.compile("\\$while\\((.*?)\\)(.*?)\\$endWhile", Pattern.DOTALL);
Matcher matcher = pattern.matcher(yourString);
while(matcher.find()){
    String variable = matcher.group(1); // this will include the $
    String value = matcher.group(2);
    // now do something with variable and value
}

Если вы хотите заменить переменные в исходном тексте, вы должны использовать Matcher.appendReplacement () / Matcher.appendTail () решение:

Pattern pattern = Pattern.compile("\\$while\\((.*?)\\)(.*?)\\$endWhile", Pattern.DOTALL);
Matcher matcher = pattern.matcher(yourString);
StringBuffer sb = new StringBuffer();
while(matcher.find()){
    String variable = matcher.group(1); // this will include the $
    String value = matcher.group(2);
    // now do something with variable and value
    matcher.appendReplacement(sb, value);
}
matcher.appendTail(sb);

Справка:

0 голосов
/ 10 августа 2013

открытый класс PatternInString {

static String testcase1 = "what i meant here";
static String testcase2 = "here";

public static void main(String args[])throws StringIndexOutOfBoundsException{
    PatternInString testInstance= new PatternInString();
    boolean result = testInstance.occurs(testcase1,testcase2);
    System.out.println(result);
}

//write your code here
public boolean occurs(String str1, String str2)throws StringIndexOutOfBoundsException
    { int i;
      boolean result=false;


      int num7=str1.indexOf(" ");
      int num8=str1.lastIndexOf(" ");
      String str6=str1.substring(num8+1);
      String str5=str1.substring(0,num7);
      if(str5.equals(str2))
      {
          result=true;
      }
      else if(str6.equals(str2))
      {
          result=true;
      }

     int num=-1;
      try
      {
      for(i=0;i<str1.length()-1;i++)
      {    num=num+1;
           num=str1.indexOf(" ",num);

           int num1=str1.indexOf(" ",num+1);
           String str=str1.substring(num+1,num1);

           if(str.equals(str2))
           {
               result=true;
               break;
           }



      }
      }
      catch(Exception e)
      {

      }


     return result;

     }

}

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