"<li>([\\u4e00-\\u9fa5]{2,10})([a-zA-z]+)</li>"
来源:2-2 Java中Web页面信息提取
mixiaofan
2019-11-26 14:27:56
Pattern p = Pattern.compile("<li>([\\u4e00-\\u9fa5]{2,10})([a-zA-z]+)</li>");
这一句话中的正则表达式,为什么不需要加入^$?
4回答
好帮手慕阿满
2019-11-26
同学你好,如果加上^和$,则要求完全匹配,所以如果html只有一个li标签,可以正确读取和输出,例如:<li>纽约NewYork</li>,结果如:


否则不会输出。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
好帮手慕阿满
2019-11-26
同学你好,同学将如下输出语句注释掉了,所以控制台不会输出,如:

建议同学去掉注释试试。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
mixiaofan
提问者
2019-11-26
package com.imooc.regex;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexSample {
public static void main(String[] args) {
StringBuilder content = new StringBuilder();
try {
FileInputStream fis = new FileInputStream("C:\\My Work Material\\idea\\zhengzebiaodashi\\regex\\web\\sample.html");
InputStreamReader isr = new InputStreamReader(fis, "utf-8");
BufferedReader bufferedReader = new BufferedReader(isr);
String lineText = "";
// 整行读取,直到读取为空
while ((lineText = bufferedReader.readLine()) != null) {
// System.out.println(lineText);
content.append(lineText+"\n");
}
bufferedReader.close();
// System.out.println(content);
} catch (Exception e) {
e.printStackTrace();
}
// Pattern类是正则表达式的类
// 1.创建正则表达式对象
Pattern p = Pattern.compile("^<li>([\\u4e00-\\u9fa5]{2,10})([a-zA-z]+)</li>$");
// 2.匹配正则表达式
Matcher m = p.matcher(content);
// 3.查找匹配的结果
while (m.find()){
// System.out.println(m.group(0));
String chs = m.group(1);
String eng = m.group(2);
System.out.println(chs + "--" + eng);
}
}
}这里我加上之后什么输出都没有了
好帮手慕阿满
2019-11-26
同学你好,同学是指开头^和结尾的$吗?这里可以不加的,如果加上,表示要完全匹配正则表达式,如果不加,表示可以匹配子字符串。
例如:正则表达为[123][a-d],如果不加^和$,则字符串1a1可以匹配1a,如果加上^和$,1a1不能完全匹配,提示没有匹配项。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
相似问题
回答 1