正则表达式不匹配通配符

时间:2014-01-09 11:09:29

标签: java regex

我有以下HTML:

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

OR(换行符)

<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。有什么建议?谢谢!

4 个答案:

答案 0 :(得分: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如何被送入该计划 因为您可以从此输出中看到代码本身正常。

答案 1 :(得分:1)

默认情况下,Dot与换行符不匹配。

使用Pattern rP = Pattern.compile(">P: </font>(.*?)<font", Pattern.DOTALL);

参考here

答案 2 :(得分: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

答案 3 :(得分: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中,唯一区别在于转义字符。