2014-01-09 2 views
0

У меня есть следующий HTML:регулярное выражение не соответствует подстановочные

<tr><td><font color="#306eff">P: </font>9283-1000<font color="#306eff">&nbsp;&nbsp; 

ИЛИ (перевод строки)

<tr><td><font color="#306eff">P: </font>9283-1000 

<font color="#306eff">&nbsp;&nbsp; 

Я пошел regexpal.com и вошел в следующее регулярное выражение:

P: </font>(.*?)<font 

И это соответствует. Но когда я делаю это в Java, это не соответствует:

Pattern rP = Pattern.compile(">P: </font>(.*?)<font"); 
    Matcher mP = rP.matcher(data); 

    if (mP.find()) { 
     System.out.println(mP.group(1).trim()); 
    } 

Есть несколько регулярных выражений я пытался по разным поводам, и они просто не работают в Java. Какие-либо предложения? Благодаря!

+0

Java имеет свой собственный REGEX – Keerthivasan

+0

[Вместо этого использовать парсер HTML] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags?answertab=oldest # tab-top) – Reimeus

ответ

1

Точка по умолчанию не соответствует новой строке.

Pattern rP = Pattern.compile(">P: </font>(.*?)<font", Pattern.DOTALL); Использование

Reference here.

+0

Большое вам спасибо, что решил мою проблему !! – user2320462

2

Ваши работы отлично подходят для меня.

public static void main(String[] args) { 
     String data = "<tr><td><font color=\"#306eff\">P: </font>9283-1000<font color=\"#306eff\">&nbsp;&nbsp;"; 
     Pattern rP = Pattern.compile(">P: </font>(.*?)<font"); 
     Matcher mP = rP.matcher(data); 

     if (mP.find()) { 
      System.out.println(mP.group(1).trim()); 
     } 
    } 

Отпечатано: 9283-1000.

Я думаю, проблема может быть в том, как data подается в программу.
Потому что сам код в порядке, как вы можете видеть из этого вывода.

+0

Я обновил код. Ввод содержит новую строку. Вот почему он не подходит. Можете ли вы рассказать мне, как это согласовать? – user2320462

0

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

(?ims).*?>P: </font>(.*?)<font.+ 

Пример кода

public static void main(String[] args) { 
    String data="<tr><td><font color=\"#306eff\">P: </font>9283-1000<font color=\"#306eff\">&nbsp;&nbsp;"; 
    Pattern rP = Pattern.compile("(?ims).*?>P: </font>(.*?)<font.+"); 
    Matcher mP = rP.matcher(data); 

    if (mP.find()) { 
      System.out.println(mP.group(1).trim()); 
    } 
} 

Выход

9283-1000

+0

не работает .. любые другие советы? – user2320462

+0

@ user2320462 Можете ли вы опубликовать данные, которые вы используете в своем вопросе? – Stephan

+0

Я обновил свой вопрос. Ввод содержит символы новой строки. Можете ли вы рассказать мне, как с этим справиться? Спасибо – user2320462

0

Попробуйте это:

String data="<tr><td><font color=\"#306eff\">P: </font>9283-1000<font color=\"#306eff\">&nbsp;&nbsp;"; 
Pattern rP = Pattern.compile(">P: </font>(.*?)<font"); 
Matcher mP = rP.matcher(data); 

if (mP.find()) { 
     System.out.println(mP.group(1).trim()); 
} 

В Java Единственное различие заключается в экранирующего символа.

+0

Извините, я не вижу разницы – user2320462

+0

Разница в переменной данных. В символах java строки должны находиться между «". В вашем html-коде есть двойные кавычки.Таким образом, вы хотите избежать этих символов, используя escape-символ \. –

Смежные вопросы