"<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>,结果如:

http://img.mukewang.com/climg/5ddcf62a0979571803340104.jpg

http://img.mukewang.com/climg/5ddcf63509085b8d02730125.jpg

否则不会输出。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

0

好帮手慕阿满

2019-11-26

同学你好,同学将如下输出语句注释掉了,所以控制台不会输出,如:

http://img.mukewang.com/climg/5ddce92f093ae42908950265.jpg

建议同学去掉注释试试。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

0
hixiaofan
h // 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); } 加上^$后不输出,不加上就正常输出
h019-11-26
共1条回复

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);
        }
    }
}

这里我加上之后什么输出都没有了


0

好帮手慕阿满

2019-11-26

同学你好,同学是指开头^和结尾的$吗?这里可以不加的,如果加上,表示要完全匹配正则表达式,如果不加,表示可以匹配子字符串。

例如:正则表达为[123][a-d],如果不加^和$,则字符串1a1可以匹配1a,如果加上^和$,1a1不能完全匹配,提示没有匹配项。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

0
hixiaofan
h 老师看下新的回复
h019-11-26
共1条回复

0 学习 · 9666 问题

查看课程