正则表达式是一种强大而灵活的文本处理工具。
一般来讲,正则表达式就是以某种方式来描述字符串,对字符串进行匹配搜索。例如,想要找到一个数字,在正则表达式中用\d表示一位数字;想要找到字符串中的空字符时使用"\\s","\\"在java中的意思是“为正则表达式插入一个反斜线“,而"\s"表示空白符(空格、tab、换行、换页和回车)。
正则表达式是一种简洁的、动态的语言,提供了一种完全通用的方式,能够解决各种字符串处理的相关问题(匹配、选择、编辑、验证等)。
再举几个栗子说明一下:
"-1234".matches("-?\\d+") true
"+211".matches("-?\\d+") true
"+527".matches("(-|\\+)?\\d+") true
"-?\\d+"表示负数后有一个或多个数字。
当需要匹配可能负数也可能正数时,使用表达式"(-|\\+)?\\d+",其中"(-|\\+)"是正则表达式的一个捕获组,里面的"|"表示逻辑或,表示负数或者正数,之所以是"\\+"来表示正数是因为在正则表达式中"+"有着特殊的用法。"\\d"->"\d"表示数字[0-9],后边的"+"就是"+"在正则表达式的特殊用法,即表示匹配"匹配一个或者多个修饰字符",在这里表示匹配一个或多个数字。
有一个"替换空格"的算法题目是这么描述的:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
利用Java的String类自带的一个正则表达式工具--replaceAll()方法很容易解决。
public String replaceSpace(StringBuffer str) {
return str.toString().replaceAll("\\s", "%20");
}
正如上面代码所示,只需一句代码就更搞定,可见正则表达式的强悍之处。
对于Java的正则表达式来说,String类自带的功能比较有限,Java语言提供了强大的正则表达式对象。导入"java.util.regex"包,然后用 static Pattern.compile()方法来编译你的正则表达式即可。然后将你想要检索的字符串传入Pattern对象的matcher()方法。该对方法会生成一个Matcher对象。
举个栗子:
Matcher m = Pattern.compile("\\w+")
.matcher("Evening is full of the linnet's wings");
while(m.find())
System.out.print(m.group()+" ");
输出:Evening is full of the linnet s wings
其中"\\w+"表示匹配一个或多个词字符,Matcher的find()方法可以像迭代器一样前向遍历输入字符串。
附表:正则表达式字符
B 指定字符B
\xhh 十六进制的oxhh的字符
\uhhhh 十六进制的oxhhhh的Unicode字符
\t 制表符tab
\n 换行符
\t 回车
\f 换页
\e 转义
附表:正则表达式字符
B 指定字符B
\xhh 十六进制的oxhh的字符
\uhhhh 十六进制的oxhhhh的Unicode字符
\t 制表符tab
\n 换行符
\t 回车
\f 换页
\e 转义
正则表达式字符类
[abc] 包含a、b和c的任何字符(和a|b|c相同)
[^abc] 除了a、b和c之外的任何字符(^表示否定)
[a-zA-Z] 从a到z或者从A到Z的任何字符(-表示范围)
[abc[hij]] 任意a、b、c、h、i和j字符(和a|b|c|h|i|j作用相同)(表示合并)
[a-z&&[hij]] 任意h、i或j(&&表示交)
\s 表示空白符(空格、tab、换行、换页和回车)
\S 非空白符(^\s)
\d 数字[0-9]
\D 非数字[^0-9]
\w 词字符[a-zA-Z0-9]
\W 非词字符[^\w]
逻辑操作符
XY Y跟在X后面
X|Y X或Y
(X) 捕获组。可以在表达式中用\i引用第i个捕获组
边界匹配符
^ 一行的起始
$ 一行的结束
\b 词的边界
\B 非词的边界
\G 前一个匹配的结束
量词
X? 一个或零个X
X* 零个或多个X
X+ 一个或多个X
X{n} 恰好n次X
X{n,} 至少n次X
X{n,m} 至少n次,至多m次X
未完待续.....
初识Java正则表达式
最新推荐文章于 2023-05-29 13:13:19 发布