正则表达式的用法

正则表达式在Java的使用

  • Java中用双反斜杠表示正则中的单反斜杠,所以\w必须写成\\w,其他同理
  • 使用spilt分割的时候,匹配的字符会“消失”,即作为分割

下面开始介绍Java里面的正则表达式

1.几个简单的知识:

  • 1.\w 小写w 和 大小写字母 数字 下划线 相匹配 (Java编程思想竟然说\w识别单词,害
  • 2.\w+ 识别上述字符以及后面的一串满足条件的
  • 3.\W 识别其他字符
  • 4.\W+ 识别其他字符以及后面的其他字符
  • 5.+号如果作为正号需要加\\ 作为后缀不需要
  • 6.a\w+表示以a开头的且后面必须跟着上述字符的,比如"a(空格符)" 是不符 合的
\w \W
public class Spilt {
    public static void main(String[] args) {
        /*  \w  \w+ \W  \W+*/
        /*
        * 1.\w  小写w 和 大小写字母 数字 下划线 相匹配 (Java编程思想竟然说\w识别单词,害
        * 2.\w+ 识别上述字符以及后面的一串满足条件的
        * 3.\W  识别其他字符
        * 4.\W+ 识别其他字符以及后面的其他字符
        * */
        String s1="3ap1le pe5cah";
        String s2="ap_ple _peach or3nge_";
        split(s1,"\\w+");
        split(s2,"\\w+");

        split(s1,"a\\w+");
        split(s2,"a\\w+");

        split(s1,"\\W+");
        split(s2,"\\W+");
    }
    public static void split(String s,String regex){
        List<String> strings = Arrays.asList(s.split(regex));
        System.out.println(regex);
        print(strings);
    }
    public static void print(List<String> list){
        System.out.println("--------------");
        for(String s:list){
            System.out.println(s);
        }
        System.out.println("--------------");
    }
}

这里补充一点需要注意的:
比如如下是一个字符串 ap p,在使用a\\w+的时候,list的0号元素是null
在这里插入图片描述
list.get(0)–> null
list.get(1)–>" "
list.get(2)–>“p”

\d

表示数字字符,利用上面的方法

...
        String s3 = "13a 2 3";
        split(s3,"\\d+");//一串数字
        split(s3,"\\d");//一个数字
...
限定符
  • “+” 至少1次

  • “*” 0次 1次 多次

  • “?” 至多1次

  • {n} n为非负整数 匹配n次

  • {n,} 至少匹配n次

  • {n,m} 至少n次,至多m次

public class Spilt {
    public static void main(String[] args) {
        //限定符
        // "+"  至少1次
        split("apple orange","ap+");
        split("apple orange","appp+");
        // "*" 0次 1次 多次
        split("apple orange","ap*");
        split("apple orange","appp*");
        // "?" 至多1次
        split("apple orange","ap?");
        // {n} n为非负整数 匹配n次
        split("apple","p{2}");//pp
        split("apple","p{3}");//ppp
        split("apple","p{1}");//p
        // {n,} 至少匹配n次
        split("apple","p{2,}");//pp
        split("apple","p{3,}");//ppp
        split("apple","p{1,}");//p
        // {n,m} 至少n次,至多m次
        split("apple","p{1,2}");//p
        split("aple","p{2,3}");//pp
    }
    public static void split(String s,String regex){
        List<String> strings = Arrays.asList(s.split(regex));
        System.out.println(regex);
        print(strings);
    }
    public static void print(List<String> list){
        System.out.println("--------------");
        for(String s:list){
            System.out.println(s);
        }
        System.out.println("--------------");
    }
}
限定符
  • 限定符 ^(不是非!) $ \B \b
  • 行首 ^
  • 行尾 $
  • 单词边缘 \b
  • 非单词边缘 \B
		//split()方法看上文
		//限定符 ^(不是非!) $ \B \b
        split("apple","^apple");//^匹配行首
        split("apple","^pl");
        split("apple","e$");//$匹配行尾
        split("apple","l$");
        //单词边缘,即字母和空格的边缘
        split("apple orange","l\\b");//单词边缘
        split("apple orange","e\\b");
        split("apple orange","l\\B");//非单词边缘
        split("apple orange","e\\B");
        split("apple orange","\\B");
        split("apple orange","\\b");
其他
  • . 匹配到任何一个单字符
  • .* 任何一串单字符
  • 在*, +, ? 后面加 ?,可使贪婪型变为非贪婪的
  • 字符集合,匹配到[]中的任意一个
  • () 括号括住的是一个整体
		//split()方法看上文
		//. 匹配到任何一个单字符
        split("apple",".e");
        //.* 任何一串单字符
        split("apple>e>","p.*>");//贪婪型,匹配尽可能多
        
        //在* + ? 后面加 ?,可使贪婪型变为非贪婪的
        split("apple>e>","p.*?>");//非贪婪型,匹配尽可能少
        //字符集合 匹配到[]中的任意一个
        split("apple","[a]");
        split("apple","[^a]");
        split("apple","[aple]");
        split("apple","[a-p]");
        //() 被括住的是一个整体
        split("apple orange","(ap)+");
        split("apple orange","ap+");

2.Pattern Matcher

创建

pattern可以根据正则表达式生成一个Pattern对象,可以创建一个Matcher对象处理字符串

        //Matcher 和 Pattern
        Pattern p = Pattern.compile("ap");//接收正则表达式ap 即regex
        Matcher m = p.matcher("appap ap le");//接收字符串,对其处理
        //System.out.println(m.find());
        //find() 寻找input字符串里面是否有pattern的regex
        //start() end() 表示regex的坐标
        while(m.find()){
            System.out.println(m.start()+" "+m.end());
        }
group 组

Java将用括号括住的称为组
“a(ab+)c(dd+)”
全部的匹配是第0组
从左到右,第一个括号ab+ 称为第1组
dd+是第2组

groupCount()组数
group(int groub)返回第group组的匹配

public class Spilt {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("(?m)(\\S+)\\s+((\\S+)\\s+(\\S+))$");
        Matcher m = p.matcher("red blue black pink\n"
                + "Red Blue Black Pink\n"
                + "car bus bicycle train\n");
        //group test1
        while(m.find()){
            for(int i = 0;i <= m.groupCount();i++){
                System.out.print("["+m.group(i)+"]");
            }
            System.out.println("--");
        }     
        p=Pattern.compile("(ab)+");
        m = p.matcher("abbabaabb");
        //group test2
        while(m.find()){
            for(int i = 0;i <= m.groupCount();i++){
                System.out.print("["+m.group(i)+"]");
            }
            System.out.println("--");
        }  
}
find() lookingAt() matches()方法比较

这三个方法都是寻找匹配的方法,但是用法有区别。

  • matches() 每次都从开头开始,字符串整体匹配才会为true,true则指针移动
  • lookingAt() 每次都从开头开始,部分匹配就返回true, 指针移动到这次匹配的后面
  • find() 从当前位置指针开始寻找匹配,直到找到一个匹配,成功后指针移动
  • reset()将指针移到开头
  • reset(String input);将指针指向input这个新的字符串,开始处理新字符串

只有在使用find,lookingAt,matches等方法匹配成功时,start,end,group…这些方法才能正常调用,否则抛出异常IllegalStateException("No match found")


public class Spilt {
	public static void main(String[]args){
        Pattern g = Pattern.compile("([A-Z]\\w+)");
        String str = "Apple apple";
        //matcher.matches()  每次都从str开头开始,str整体匹配才会为true,true指针移动
        //matcher.lookingAt() 每次都从str开头开始,部分匹配就返回true, 指针移到这次匹配的后面
        //matcher.find()  从当前位置指针开始匹配,一直往后直到找到一个匹配,成功后指针移动
        //1. find,lookingAt 比较
        Matcher matcher = g.matcher(str);
        System.out.println(matcher.lookingAt());
        System.out.println(matcher.find());
        //out true false
        matcher.reset();//将指针移向str开头
        System.out.println(matcher.find());
        System.out.println(matcher.lookingAt());
        //out true true
        System.out.println(matcher.matches());
        //out false
        matcher.reset();
        str = "Apple";
        matcher = g.matcher(str);
        System.out.println("-----------------");
        //2. find,matches 比较
        System.out.println(matcher.matches());
        System.out.println(matcher.find());
        //out true false
        matcher.reset();
        System.out.println(matcher.find());
        System.out.println(matcher.matches());
        matcher.reset();
        //out true true
	}
}
Matcher对象的replace方法
  • replaceAll(String s); 将所有匹配到的替换成s的内容
  • replaceFirst(String s); 将第一个匹配到的替换为s的内容
  • appendReplacement(StringBuffer,String s); 将这次匹配的替换成第二个参数的值,同时在StringBuffer追加上次匹配位置到这次匹配位置的字符串
  • appendTail()追加上次匹配位置到最后结尾的字符串
public class Spilt {
    public static void main(String[] args) {
        //appendReplacement() 将这次匹配的替换成第二个参数的值
        //StringBuffer中追加上次匹配到这次匹配的字符串
        //appendTail()追加上次匹配到最后的字符串
        Pattern p = Pattern.compile("cat");
        Matcher m = p.matcher("one cat two cats in the yard");

        StringBuffer sb = new StringBuffer();
        while (m.find()) {
            //第一次循环  sb = "one dog"
            //第二次循环 sb = "one dog two dog"
            m.appendReplacement(sb, "dog");
        }
        System.out.println(sb);
        m.appendTail(sb);//追加  "s in the yard"
        System.out.println(sb.toString());
    }
}
### 回答1: LabVIEW正则表达式是一种强大的文本处理工具,它可以用来在字符串中查找、匹配和替换特定的模式。 LabVIEW提供了几个函数来支持正则表达式的使用,包括Match Regular Expression、Replace Regular Expression Match、Search Regular Expression等。 Match Regular Expression是最常用的函数,它可以根据正则表达式模式在输入的字符串中查找匹配项,并返回匹配的结果。这个函数可以用来验证输入的格式是否符合特定的模式。它接受两个输入参数:待匹配的字符串和正则表达式模式。如果找到匹配项,则返回True,否则返回False。 Replace Regular Expression Match函数可以用来替换字符串中与正则表达式模式匹配的部分。它接受三个输入参数:待替换的字符串、正则表达式模式和替换后的字符串。它会将字符串中所有匹配的部分替换为指定的字符串。 Search Regular Expression函数可以用来在字符串中搜索与正则表达式模式匹配的所有位置。它返回一个数组,数组的每个元素都包含了匹配的位置信息。 正则表达式的语法非常灵活,可以表达很多复杂的匹配模式。常见的用法包括匹配邮箱、电话号码、URL等。例如,使用正则表达式模式"\\d{3}-\\d{4}-\\d{4}",可以匹配格式为XXX-XXXX-XXXX的电话号码。 总之,LabVIEW正则表达式提供了一种强大的文本处理工具,可以用来查找、匹配和替换特定的模式。学习和掌握正则表达式的使用,可以帮助我们更高效地处理和分析各种文本数据。 ### 回答2: LabVIEW正则表达式是一种用于字符串匹配和搜索的强大工具。正则表达式是由一系列字符和特殊字符构成的模式,可以用来检查字符串是否符合某个规则,或者从字符串中提取符合某个规则的部分。 LabVIEW中可以使用正则表达式的模式匹配工具函数来进行字符串的模式匹配和搜索。常用的函数有Match Pattern和Array Match Pattern。 Match Pattern函数用于检查一个字符串是否符合给定的正则表达式模式,返回布尔值。例如,可以使用"^LabVIEW"模式来检查字符串是否以"LabVIEW"开头。 Array Match Pattern函数用于在一个字符串数组中搜索符合给定正则表达式模式的元素,并返回符合条件的元素的索引。例如,可以使用"\d+"模式来搜索一个字符串数组中的所有整数元素。 在LabVIEW中,正则表达式模式可以包含各种特殊字符和元字符,用于表示不同类型的字符和匹配方式。一些常见的特殊字符和元字符包括: - ".":匹配任意字符 - "^":匹配字符串的起始位置 - "$":匹配字符串的结束位置 - "*":匹配前一个字符的零个或多个实例 - "+":匹配前一个字符的一个或多个实例 - "?":匹配前一个字符的零个或一个实例 - "[]":指定一个字符范围,如[a-z]表示小写字母范围 此外,LabVIEW还提供了一些与正则表达式相关的函数和工具,如正则表达式替换、拆分字符串和提取匹配结果等。 总之,LabVIEW正则表达式提供了一种强大而灵活的字符串模式匹配和搜索工具,能够大大简化字符串处理和分析的过程。通过熟练掌握正则表达式的语法和使用方法,可以更高效地进行字符串处理和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值