初识Java正则表达式

正则表达式是一种强大而灵活的文本处理工具。

一般来讲,正则表达式就是以某种方式来描述字符串,对字符串进行匹配搜索。例如,想要找到一个数字,在正则表达式中用\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,正则表达式,搜索,语言)