java正則表達式的坑
java中正則表達式比較有意思,这里列举几个常见的坑
1.[]符号,中括号表示当中的数据都是或的关系
假设[\\w+]是匹配条件 abc能否够匹配的到呢?
首先\\w(注意这里没有中括号)表示a-z A-Z 0-9 _多个字符组合,显然abc随意一个在里面的,后又有+号。表示有多个字符,所以abc能够匹配\\w+
可是[\\w+]表示的意思是多个字符的或,注意是或。所以[\\w+]等同于[a-z|A-Z|0-9|_],这里面的或仅仅有单个字符
所以a或者b或者c都能够匹配[\\w+],可是abc不能够,怎样让abc能够匹配呢非常easy仅仅须要将条件外面加上+号标识多个字符就能够了。
2.转义符号
java转义非常麻烦各种\\,须要细致理解
java中\是没有意义的,在字符串中你出现一个\,编译器会告诉你是错误的,不能这样
所以java中\\表示一个\。在正則表達式匹配中如匹配数字写的是\\d事实上是\\表示一个\最后的效果是\d.
这个时候有人要问了,我仅仅要匹配\d这个字符而不是匹配数字怎么办。这个时候须要在加一个转义符。告诉大家这个字符不是\d表示的数字,而是详细字符串\d,详细的结果是非常蛋疼的在加上一个转义字符\\。所以会出现\\\\d,java会解析成\\d,表示对\d在做转义,就是单纯的\d。
再比方[\\]这个简单的表达式,假设你去调用则会报错。为什么?
由于java会觉得你仅仅传了一个转义符。而单独的转义符是没有意义的。假设你要匹配\号,须要的表达式是\\\\前面的\\表示转义符号,后面的\\表示真正匹配的\号。- -!
java转义字符关键是两个\\表示一个\。会让人费解。须要注意。