我有这三个文本和一个正则表达式。(好吧,它是 HTML,但是......请不要专注于它!!!!)
<h3 class="pubAdTitleBlock "><a href="/it/pubblicazioni/libri/Che-speranza-cè-per-i-morti/1101987030/" title="Che speranza c’è per i morti?">Che speranza c’è per i morti? (volantino N. 16)</a></h3>
<h3 class="pubAdTitleBlock "><a href="/it/pubblicazioni/libri/cosa-insegna-la-bibbia/È-questo-che-Dio-voleva/" title="È questo che Dio voleva?">Cosa insegna realmente la Bibbia?</a></h3>
<h3 class="pubAdTitleBlock">Cantiamo a Geova</h3>
这是正则表达式
regexp = "<h3[^>]*>(<a[^>]*>)?([^<]+)(</a>)?</h3>";
我有三个 3 组:
- 开始
<a>
标签(可选) - 文本(这是书名,是 regexp 的目标)
- 结束
</a>
标签(可选)
问题:第二行匹配,第三行匹配。第一个没有。为什么 ?
匹配代码:
pattern = Pattern.compile(regexp);
matcher = pattern.matcher(fullString);
idx = 0;
while (matcher.find()) {
...
}
matcher.find()
只是跳过第一行。这不是文件的第一行,而是第 10 行。这是第一个例子。
可以是字面括号的问题吗?如何修复正则表达式?
编辑:我试过
String regexp = "<h3[^>]*>(.+)</h3>";
但是这个正则表达式也跳过了第一行......我真的无法理解!!!!
编辑2:
我有一个问题:如果有重音字符会是个问题吗?
编辑 3:
我正在尝试从这里进行数据抓取:http ://www.jw.org/it/pubblicazioni/libri/?contentLanguageFilter=it&sortBy=3
我有一个输入流,然后我使用以下代码转换为单个字符串:
// copied from http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string
public static String convertStreamToString(InputStream is) {
try {
return new java.util.Scanner(is, "UTF-8").useDelimiter("\\A").next();
} catch (java.util.NoSuchElementException e) {
return "";
}
然后我正在应用正则表达式...