Как написать строковые литералы Java, содержащие двойные кавычки (")? - PullRequest
0 голосов
/ 10 марта 2010

Я получаю ошибку времени компиляции.

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

class gfile
 {
  public static void main(String args[]) {
    // create a Pattern
    Pattern p = Pattern.compile("<div class="dinner">(.*?)</div>");//some prob with this line


    // create a Matcher and use the Matcher.group() method
  String can="<tr>"+
                          "<td class="summaryinfo">"+

                                "<div class="dinner">1,000</div>" +
                                "<div style="margin-top:5px " +
                                 "font-weight:bold">times</div>"+
                            "</td>"+
                        "</tr>";

    Matcher matcher = p.matcher(can);
    // extract the group

    if(matcher.find())
     {
    System.out.println(matcher.group());
     }
  else
     System.out.println("could not find");
  }
}

Ответы [ 5 ]

7 голосов
/ 10 марта 2010

В вашем звонке на Pattern.compile есть неэкранированные кавычки.

Изменение:

Pattern p = Pattern.compile("<div class="dinner">(.*?)</div>");

Кому:

Pattern p = Pattern.compile("<div class=\"dinner\">(.*?)</div>");

Примечание: я только что видел ту же проблему в вашей банке String.

Измените его на:

  String can="<tr>"+
                      "<td class=\"summaryinfo\">"+

                            "<div class=\"dinner\">1,000</div>" +
                            "<div style=\"margin-top:5px " +
                             "font-weight:bold\">times</div>"+
                        "</td>"+
                    "</tr>";

Я не знаю, исправит ли это это, но по крайней мере сейчас оно будет компилироваться.

1 голос
/ 10 марта 2010

Но ваше регулярное выражение совпадает (. *?) «Любой символ, любое количество повторений, как можно меньше»

Это означает, что оно не соответствует ничему ... и всему.

... или тот факт, что ваши кавычки не экранированы.

0 голосов
/ 10 марта 2010

Как уже указывалось, вам нужно избегать двойных кавычек внутри всех ваших строк.

И, если вы хотите получить «1000», вам нужно будет использовать group(1), иначе вы получите полное совпадение шаблона.

Результирующий код:

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

class gfile
 {
  public static void main(String args[]) {
    // create a Pattern
    Pattern p = Pattern.compile("<div class=\"dinner\">(.*?)</div>");

    // create a Matcher and use the Matcher.group() method
    String can="<tr>"+
                          "<td class=\"summaryinfo\">"+

                                "<div class=\"dinner\">1,000</div>" +
                                "<div style=\"margin-top:5px " +
                                 "font-weight:bold\">times</div>"+
                            "</td>"+
                        "</tr>";

    Matcher matcher = p.matcher(can);

    if(matcher.find())
    {
       System.out.println(matcher.group(1));
    }
    else
       System.out.println("could not find");
  }
}
0 голосов
/ 10 марта 2010

Вы должны использовать анализатор HTML для анализа и обработки HTML - не регулярное выражение.

0 голосов
/ 10 марта 2010

(.*?), возможно, должно быть <code>(.*)?

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