2016-04-12 116 views
1

我需要知道某个字符串的某个部分是否包含特定的单词。正则表达式:部分包含

例: 搜索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()

+1

你想要得到的颜色值? – Hackerdarshi

+0

@Hackerdarshi不,我需要知道是否有一个带有颜色的HTML标签 Wavum

+1

在这个用例中,JSoup看起来比正则表达式更强大。 –

回答

2

只是根据您的例子测试用例提供,你也许可以用一个简单的正脱身像这样的表达:

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

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

但是,正如在注释中指出的那样,正则表达式通常不太适合处理HTML。

3

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

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

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