"<li>([\\u4e00-\\u9fa5]{2,10})([a-zA-z]+)</li>"

"<li>([\\u4e00-\\u9fa5]{2,10})([a-zA-z]+)</li>"

Pattern p = Pattern.compile("<li>([\\u4e00-\\u9fa5]{2,10})([a-zA-z]+)</li>");
这一句话中的正则表达式,为什么不需要加入^$?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
好帮手慕阿满 2019-11-26 17:54:15

同学你好,如果加上^和$,则要求完全匹配,所以如果html只有一个li标签,可以正确读取和输出,例如:<li>纽约NewYork</li>,结果如:

http://img1.sycdn.imooc.com//climg/5ddcf62a0979571803340104.jpg

http://img1.sycdn.imooc.com//climg/5ddcf63509085b8d02730125.jpg

否则不会输出。

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

好帮手慕阿满 2019-11-26 16:42:59

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

http://img1.sycdn.imooc.com//climg/5ddce92f093ae42908950265.jpg

建议同学去掉注释试试。

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

  • 提问者 mixiaofan #1
    // 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 16:51:21
提问者 mixiaofan 2019-11-26 15:58:58
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 15:52:59

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

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

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

  • 提问者 mixiaofan #1
    老师看下新的回复
    2019-11-26 15:59:10
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师