正则表达式:部分包含

时间:2016-04-12 12:55:10

标签: java regex

我需要知道字符串的一部分是否包含特定的单词。

实施例: 在color="<font

中搜索>
<font color="black">                                 = <font color="black">
BlaBla <font color="red">                            = <font color="red">
<font size="2" color="white">                        = <font size="2" color="white">
<font size="2">                                      = false
<font size="10"><font color="black"><font size="10"> = <font color="black">

我将Java与String.matches()

一起使用

4 个答案:

答案 0 :(得分:3)

对于解析HTML,应该更好地使用JSOUP。要快速介绍,请先从cookbook开始。

答案 1 :(得分:2)

根据您提供的示例测试用例,您可以使用这样的简单正则表达式:

<font[^>]*color="[^"]+"[^>]*>

演示:http://jpad.io/example/1u/36573959-example

但是,正如评论中所指出的,正则表达式通常不适合处理HTML。

答案 2 :(得分:2)

你可以使用正则表达式处理这个问题,但这很危险。

另一方面,JSOUP适用于该用例并且非常易于使用。

示例:

public static void main(String[] argv) throws Exception {
  Document document = Jsoup.parse("<font id=\"myFont\" color=\"black\">");
  Elements font = document.select("font");
  for (Element element : font) {
    System.out.println(element.attr("color"));
  }

}

输出

black

答案 3 :(得分:1)

尝试以下正则表达式:

(?<=\<)(\w+)[^<]*color.*?\>

演示:

String data = "<font color=\"black\">";
String strFind = "color";

Pattern regex = Pattern.compile("(?<=<)(\\w+)[^<]*"+strFind+".*?>", Pattern.MULTILINE);

Matcher matcher = regex.matcher(data);
while (matcher.find()) {
    String content = matcher.group(1) == null ? matcher.group() : matcher.group(1);
    System.out.println(content);
}

提供示例文本,它将打印包含所需字符串的标记名称。在这种情况下,它将是font