论文部分内容阅读
摘要:随着信息技术的高速发展,计算机面临着大量的数据处理业务。文本字符串处理是一种经常性的业务,正则表达式在复杂字符串处理方面有着得天独厚的优势。文章介绍了Java语言中的正则表达式处理方法,分析了复杂字符串的分割、查找、替换和提取特殊子串的方法,总结了构建正则表达式重要性。
关键词:文本;字符串;正则表达式;模式;Java
中图分类号:TP312 文献标识码:A
文章编号:1009-3044(2019)32-0095-04
1背景
处理文本和数据是计算机经常要做的事情,诸如存储在数据库的数据、文本编辑处理、网上注册、填报登记的信息、网站新闻列表等应用上都涉及大量处理文本和数据的操作。有时可能不知道需要处理的大量文本数据的具体内容,但是若把这些文本和数据以一种能让计算机识别和处理的模式表现出来,再让计算机分析和处理文本和数据就变得方便了,这就是正则表达式技术的运用,正则表达式的运用给计算机处理大量文本数据带来快速和简便的操作。
2正则表达式元字符
正则表达式(Regular Expressionl是由一些字符和特殊字符组成的字符串,这个字符串描述了字符和字符的重复排列方式,反映了字符重复排列的规律性,因此能够按某种模式匹配一些有相似特征的字符串或字符串集合。运用正则表达式首先要理解正则表达式的元字符集提供的字符和特殊字符的含义。
2.1正则表达式支持的字符
正则表达式支持的合法字符如表1所示。
表1所列的是可以在正则表达式中使用的常规字符,利用常规字符也可以定义正则表达式,如”abc\nabc”匹配”abc\nabc”,字符串自身匹配自身。Java语言中,java.util.regex包下有两个重要的类:Pattern和Matcher,这两个类提供了定义正则表达式和匹配目标字符串的主要操作。实际工作中,要用到Pattern中的matches方法,判断某个正则表达式与目标字符串是否匹配。matches方法是Pattern类的一个类方法,方法的返回值是boolean型数据,该方法需要两个参数,第一个参数是定义的正则表达式,即某种形式的模式,第二个参数是要匹配的目标字符串,当某个正则表达式与目标字符串匹配成功,方法返回true值,否则返回false,通常用matches方法测试定义的正则表达式能否匹配目标字符串。
要构造灵活的正则表达式就要用到正则表达式的特殊字符、预定义字符、边界匹配符和方括号、圆括号表达式。
2.2正则表达式的特殊字符
正则表达式的特殊字符如表2所示。
2.5圆括号表达式
当把多个字符当作一个独立单元进行处理时,就要用到圆括号表达式了,即用圆括号把多个字符分成一个子组,结合管道运算符可以可以构造关键词匹配正则表达式。
“((public)I(protected)I(private))”用于匹配Java的三个访问控制符之一。
在正则表达式中用一对圆括号可以把正则表达式分组,每一个子组能够保留下来做进一步的处理。假定要匹配的目标字符串中既含有英文字符又含有数字字符,可以使用正则表达式”(\\w )-(\\d )”来匹配,在Java中把目标字符串分成两个子组,并且两个子组匹配结果在Matcher类中以子组的形式保留下来,非常方便地进行下一步处理。而传统的做法需要编写两段程序代码,先从目标字符串中分离处英文字符并保存下来,再从目标字符串中分离出数字字符,做进一步处理,处理过程比使用圆括号运算符复杂得多。
2.6数量标识符支持的模式
特殊符号*、?、 用于匹配字符串模式出现一次、多次或未出現的情况,又称作闭包运算符或量词。*(星号)运算符匹配它左边那个正则表达式出现0次或0次以上的情况。 (加号)运算符匹配它左边那个正则表达式出现1次或多次的情况。?f问号)运算符匹配它左边那个正则表达式出现0次或1次的情况。
花括号{}运算符也是用来匹配其左边正则表达式出现的情况,花括号内可以是一个值、一个值跟一个逗号或由逗号分隔的两个值。fml表示匹配其左边那个正则表达式m次出现,{m,}表示匹配其左边那个正则表达式至少出现m次;{m,n}表示匹配其左边那个正则表达式至少出现m次,最多出现n次。
构建正则表达式时使用了表示重复的元字符(*、 、?、{m,n})说明了正则表达式引擎在执行模式匹配时的工作模式。Java语言中支持三种工作模式,第一贪婪模式(Greedv),重复元字符默认工作模式,贪婪模式的表达式会一直匹配下去,直到无法匹配为止。第二非贪婪模式(Reluctant)又称勉强模式,用问号后缀(?)表示,它只匹配最少的字符,也称为最小匹配模式。第三占有模式(Possessive),用加号后缀( )表示,目前只有Java语言支持该模式,通常比较少用。
上面第一行使用贪婪模式匹配第一个出现的单词,输出结果x替换掉Hello,第二行使用非贪婪模式匹配,即匹配最少的字符,Hello,Java前的第0个字符替换成x。
3正则表达式的应用
正则表达式是一个强大的字符串处理工具,互联网上的网页文件其实质是一个庞大的字符串文件,利用正则表达式可以对字符串进行查找、提取、分割和替换等操作。
3.1Pattern和Marcher类
Pattern类和Matcher类位于iava.util.regex包内,两者都是终极类,一旦在程序中定义了正则表达式,就可以用这两个类的对象来使用正则表达式。Pattern对象用来保存编译后的正则表达式,编译后的正则表达式可以在程序中反复使用,提高程序执行的效率,利用Pattern对象创建Matcher对象,执行模式匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可以共享同一个Pattern对象。典型的调用顺序如下:
从字符串中提取特定子字符串,操作方法基本相同,只是所定义的正则表达式内容不同。
4结束语
正则表达式在大量文本字符处理上有着得天独厚的技术优势,传统的文本处理技术算法不仅复杂而且代码臃肿,执行效率也低。信息技术的高速发展促进处理大量文本数据的正则表达式技术的发展,很多计算机高级语言演化也是从不支持正则表达式技术转化为支持正则表达式技术,并且不断优化正则表达式技术,Java语言就是这样的一种语言,Java语言从1.4版以来就支持正则表达式技术,在目前见到的Java语言的各个版本中,都有着优化和改进正则表达式功能的说明。正则表达式的关键是构建一个正则表达式模式,该模式能反映出文本字符串的排列特征,从而用该模式代表符合特征的大量具体的文本字符串,为进一步的处理提供便捷。
关键词:文本;字符串;正则表达式;模式;Java
中图分类号:TP312 文献标识码:A
文章编号:1009-3044(2019)32-0095-04
1背景
处理文本和数据是计算机经常要做的事情,诸如存储在数据库的数据、文本编辑处理、网上注册、填报登记的信息、网站新闻列表等应用上都涉及大量处理文本和数据的操作。有时可能不知道需要处理的大量文本数据的具体内容,但是若把这些文本和数据以一种能让计算机识别和处理的模式表现出来,再让计算机分析和处理文本和数据就变得方便了,这就是正则表达式技术的运用,正则表达式的运用给计算机处理大量文本数据带来快速和简便的操作。
2正则表达式元字符
正则表达式(Regular Expressionl是由一些字符和特殊字符组成的字符串,这个字符串描述了字符和字符的重复排列方式,反映了字符重复排列的规律性,因此能够按某种模式匹配一些有相似特征的字符串或字符串集合。运用正则表达式首先要理解正则表达式的元字符集提供的字符和特殊字符的含义。
2.1正则表达式支持的字符
正则表达式支持的合法字符如表1所示。
表1所列的是可以在正则表达式中使用的常规字符,利用常规字符也可以定义正则表达式,如”abc\nabc”匹配”abc\nabc”,字符串自身匹配自身。Java语言中,java.util.regex包下有两个重要的类:Pattern和Matcher,这两个类提供了定义正则表达式和匹配目标字符串的主要操作。实际工作中,要用到Pattern中的matches方法,判断某个正则表达式与目标字符串是否匹配。matches方法是Pattern类的一个类方法,方法的返回值是boolean型数据,该方法需要两个参数,第一个参数是定义的正则表达式,即某种形式的模式,第二个参数是要匹配的目标字符串,当某个正则表达式与目标字符串匹配成功,方法返回true值,否则返回false,通常用matches方法测试定义的正则表达式能否匹配目标字符串。
要构造灵活的正则表达式就要用到正则表达式的特殊字符、预定义字符、边界匹配符和方括号、圆括号表达式。
2.2正则表达式的特殊字符
正则表达式的特殊字符如表2所示。
2.5圆括号表达式
当把多个字符当作一个独立单元进行处理时,就要用到圆括号表达式了,即用圆括号把多个字符分成一个子组,结合管道运算符可以可以构造关键词匹配正则表达式。
“((public)I(protected)I(private))”用于匹配Java的三个访问控制符之一。
在正则表达式中用一对圆括号可以把正则表达式分组,每一个子组能够保留下来做进一步的处理。假定要匹配的目标字符串中既含有英文字符又含有数字字符,可以使用正则表达式”(\\w )-(\\d )”来匹配,在Java中把目标字符串分成两个子组,并且两个子组匹配结果在Matcher类中以子组的形式保留下来,非常方便地进行下一步处理。而传统的做法需要编写两段程序代码,先从目标字符串中分离处英文字符并保存下来,再从目标字符串中分离出数字字符,做进一步处理,处理过程比使用圆括号运算符复杂得多。
2.6数量标识符支持的模式
特殊符号*、?、 用于匹配字符串模式出现一次、多次或未出現的情况,又称作闭包运算符或量词。*(星号)运算符匹配它左边那个正则表达式出现0次或0次以上的情况。 (加号)运算符匹配它左边那个正则表达式出现1次或多次的情况。?f问号)运算符匹配它左边那个正则表达式出现0次或1次的情况。
花括号{}运算符也是用来匹配其左边正则表达式出现的情况,花括号内可以是一个值、一个值跟一个逗号或由逗号分隔的两个值。fml表示匹配其左边那个正则表达式m次出现,{m,}表示匹配其左边那个正则表达式至少出现m次;{m,n}表示匹配其左边那个正则表达式至少出现m次,最多出现n次。
构建正则表达式时使用了表示重复的元字符(*、 、?、{m,n})说明了正则表达式引擎在执行模式匹配时的工作模式。Java语言中支持三种工作模式,第一贪婪模式(Greedv),重复元字符默认工作模式,贪婪模式的表达式会一直匹配下去,直到无法匹配为止。第二非贪婪模式(Reluctant)又称勉强模式,用问号后缀(?)表示,它只匹配最少的字符,也称为最小匹配模式。第三占有模式(Possessive),用加号后缀( )表示,目前只有Java语言支持该模式,通常比较少用。
上面第一行使用贪婪模式匹配第一个出现的单词,输出结果x替换掉Hello,第二行使用非贪婪模式匹配,即匹配最少的字符,Hello,Java前的第0个字符替换成x。
3正则表达式的应用
正则表达式是一个强大的字符串处理工具,互联网上的网页文件其实质是一个庞大的字符串文件,利用正则表达式可以对字符串进行查找、提取、分割和替换等操作。
3.1Pattern和Marcher类
Pattern类和Matcher类位于iava.util.regex包内,两者都是终极类,一旦在程序中定义了正则表达式,就可以用这两个类的对象来使用正则表达式。Pattern对象用来保存编译后的正则表达式,编译后的正则表达式可以在程序中反复使用,提高程序执行的效率,利用Pattern对象创建Matcher对象,执行模式匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可以共享同一个Pattern对象。典型的调用顺序如下:
从字符串中提取特定子字符串,操作方法基本相同,只是所定义的正则表达式内容不同。
4结束语
正则表达式在大量文本字符处理上有着得天独厚的技术优势,传统的文本处理技术算法不仅复杂而且代码臃肿,执行效率也低。信息技术的高速发展促进处理大量文本数据的正则表达式技术的发展,很多计算机高级语言演化也是从不支持正则表达式技术转化为支持正则表达式技术,并且不断优化正则表达式技术,Java语言就是这样的一种语言,Java语言从1.4版以来就支持正则表达式技术,在目前见到的Java语言的各个版本中,都有着优化和改进正则表达式功能的说明。正则表达式的关键是构建一个正则表达式模式,该模式能反映出文本字符串的排列特征,从而用该模式代表符合特征的大量具体的文本字符串,为进一步的处理提供便捷。