正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。
正则表达式(Regular Express ion(不知道为什么这个单词被和谐) ),在代码中常简写为regex、regexp或RE;
由于在实际应用中经常要对字符串进行较为复杂的操作,所以编程语言在长时间的演变中,出现了一种用事先定义好的特定字符或者这些字符的特定组合来表示一种描述字符串的规则的"规则字符串",这种规则字符串被称为正则表达式,正则表达式提供了一种对字符串进行过滤的过滤规则。
通过正则表达式可以做到以下几点:
1:确认给定字符串是否匹配此规则逻辑;(匹配)
2:遍历字符串找到符合此逻辑规则的所有子串并用这些子串
(1)作为标记切割给定字符串;(切割)
(2)给定另一字符串并将指定子串替换为这一字符串;(替换)
(3)返回这些子串(获取)
在java中,jdk提供了java.util.regex包来进行与正则表达式相关的操作,java.util.regex包提供了两个类,一个是用于封装正则表达式的Pattern类,一个是用于关联给定字符串与正则表达式并提供了各种操作的Matcher类,Pattern对象可以通过pattern类下的静态compile(regex)方法获得,而Matcher对象可以通过pattern对象的matcher()方法获得;
java中用[]表示一个字符的分类,相邻字符间没有任何分隔符,并支持基本的逻辑符号,举例如下:
[abc] a、b 或 c(简单类)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]] d、e 或 f(交集)
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)
java中预定义了一些常用的字符分类并以特定符号表示,需要注意的是,带有转义字符的字符需要两个\,具体如下:
‘.‘ 任何字符(与行结束符可能匹配也可能不匹配)
‘\d‘ 数字:[0-9]
‘\D‘ 非数字: [^0-9]
‘\s‘ 空白字符:[ \t\n\x0B\f\r]
‘\S‘ 非空白字符:[^\s]
‘\w‘ 单词字符:[a-zA-Z_0-9]
‘\W‘ 非单词字符:[^\w]
为方便对特定格式字符串的操作,java将常见的格式的边界分隔字符进行了封装并用特定字符表示,具体如下
‘^‘ 行的开头
‘$‘ 行的结尾
‘\b‘ 单词边界
‘\B‘ 非单词边界
‘\A‘ 输入的开头
‘\G‘ 上一个匹配的结尾
‘\Z‘ 输入的结尾,仅用于最后的结束符(如果有的话)
‘\z‘ 输入的结尾
为了表示特定格式字符的数量,java用{}来表示数量,并定义了一些特殊字符表示特定数量,具体如下:
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
为了表示文本中符合规则的特定序列能够重用,java中定义了组的概念,组用()符号进行划分,用\0-\9进行表示,\0一般表示为整个字符串,所以可以理解为组从\1处开始定义;$0-$9符号则表示与其相邻的前一个字符串中的组;
可以通过Matcher对象的find()方法和group()方法完成类似迭代器中hasNext()方法和next()方法的迭代动作来获取给定格式的子串并对这些子串进行操作;
为了简化书写,java在String类中封装了replaceAll()、matches()、split()等方法,使编程人员不必创建Pattern对象及Matcher对象就可以实现通过正则表达式的一些简单单一操作;
以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章