正则表达式匹配文件内容,并打印匹配的行号

今天写了一个正则表达式,这个正则表达式用来匹配相应的文件内容,并打印出匹配内容在文件中的行号。

本文所列举的代码是匹配jsp文件中的pageEncoding的正则表达式,pageEncoding的内容位于以 "<%@ page" 开头, 以”%>“结尾的模块中,并且其中可以有其他内容及换行等, 如下所示:

 <%@ page ... pageEncoding="windows-31j" %> 

代码如下:

package com.regular.test;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularTest {
    public static void main(String[] args) throws Exception {
        test();
    }
    
    public static void test() throws Exception{
        Pattern p, ln;
        Matcher m;

        String reg = "(?s)(.*?<%@[^>]*?page[^>]*?pageEncoding[^>=]*=[^>\"]*)(\"([^\"]*)\"[^>]*?%>)";
        p = Pattern.compile(reg);
        ln = Pattern.compile("\r\n?");
        m = p.matcher(getContent());
        int i = 1;
        while (m.find()) {
            i += getLnCount(m.group(1), ln);
            System.out.println( "line : " + i + ", content: " + m.group(3).trim());
            i += getLnCount(m.group(2), ln);
        } 
    }
    
    public static int getLnCount(String str, Pattern ln) {
        if(str==null) {
            return 0;
        }
        int i=0;
        Matcher m = ln.matcher(str);
        while(m.find()) {
            i++;
        }
        return i;
    }
    
    public static String getContent() throws Exception {
        InputStream in = new FileInputStream("aaa.jsp");
        byte[] aa = new byte[in.available()];
        in.read(aa);
        return new String(aa);
       
    }
}


要匹配的文件如下文件如下:

sdf

 <%@ 
 page language="java" 
 contentType="text/html; charset=windows-31j" 
 
 
 

 %> 
    
 <%@
 pageEncoding=
 "windows-31j" %> 

 <%@page 
 pageEncoding="
 gbk
 " %> 
  <%@page 
 pageEncoding="utf-8" %> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Insert title here</title>
</head>
<body>

</body>
</html>



在gvim中使用正则表达式进行匹配和替换文本是一种非常强大的编辑功能。首先,确保你的gvim是编译时加入了'+syntax'支持,这样才能使用正则表达式。 要在gvim中执行正则表达式替换,你需要使用命令模式(按下 ":" 键),然后输入替换命令。基本的替换命令格式如下: ``` :[range]s/pattern/replacement/[flags] ``` 其中各个部分的含义如下: - `[range]`:表示要操作的文本范围,可以是一个数字表示行号,也可以是如`%`代表整个文件,或者`/`代表当前行,或者`'a,'b`表示以标记a和b之间的文本作为范围。 - `s`:表示替换操作。 - `pattern`:是要匹配正则表达式模式。 - `replacement`:是用来替换匹配到文本的字符串。 - `[flags]`:可以是如下几种标志之一: - `g`:全局替换,即替换行中所有匹配项。 - `c`:确认替换,每处匹配都会要求用户确认。 - `n`:数字,指定只替换第n个匹配项。 例如,如果你想替换当前文件中所有"hello"为"world",你可以执行如下命令: ``` :%s/hello/world/g ``` 这个命令会在整个文件中把"hello"替换为"world",并且是全局替换。 如果你想替换某几行中的特定文本,比如替换第5行到第10行中所有的"goodbye"为"bye",你可以这样写: ``` :5,10s/goodbye/bye/g ``` 该命令只会对第5行到第10行之间的文本进行替换。 当然,正则表达式还包括许多特殊字符和模式,比如点号`.`表示任意字符,星号`*`表示零个或多个前面的字符,方括号`[]`表示字符集合等等,你可以根据需要使用这些正则表达式的特点来精确匹配和替换文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值