我正在尝试从HTML标签中读取内容,而且当涉及到正则表达式时我完全是愚蠢的(我虽然有一些模式,但似乎没有工作)。
我正在阅读一个网页,看看这一行:<td title='Visit Page for Demilict'><a href='personal.php?name=Demilict&c=s' class='idk' rel='Demilict' style='color: teal;'>Demilict</a></td>
我需要从那里提取'Demilict',你可以看到有3个机会这样做。
哪个是从中提取它的最佳位置?我将如何实现它?
我正在使用它来查找名称,因为我需要提取大约60个不同的名称,并且它们都使用相同的格式,除了名称只能包含字母数字和下划线。
public void parse(String list) {
try {
URL url = new URL(list);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
StringBuilder stringBuilder = new StringBuilder();
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
System.out.println(stringBuilder.toString());
Matcher matcher = namePattern.matcher(stringBuilder.toString());
if (matcher.find()) {
System.out.println("matched: " + matcher.group());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:1)
<a.*?>(\w+)</a>
会抓取<a ...>
和< /a>
之间的文字并将其放入第一组;但正如其他人所说,正则表达式可能不是最好的选择。
编辑:首先更改+到*,因为0个字符有效。还删除了第二个?根据以下评论。
答案 1 :(得分:1)
如果您确实使用正则表达式来提取名称,则此正则表达式应将名称存储在组1中:
<td[^>]*?><a[^>]*?>(\\w+)</a></td>
答案 2 :(得分:0)
这是一种方法,用于获取rel ='XXX'属性中的文本。
String val = "<td title='Visit Page for Demilict'><a href='personal.php?name=Demilict&c=s' class='idk' rel='Demilict' style='color: teal;'>Demilict</a></td>";
String newVal = val.replaceFirst("^.*rel='([a-zA-Z0-9_]+)'.*$", "$1");
System.out.println("Result: " + newVal);
基本上它只是寻找rel ='XXX',然后扔掉除了XXX以外的所有东西。它允许rel包含字符a-z和A-Z,0-9和下划线。