Java正则式使用小计:
使用正则式时一些地方总是容易忘记,这里记一下。
注意是否匹配换行,很多时候都是要的,而Java默认是不匹配的,所以在使用compile的时候注意把参数传进去
Matcher matcher = Pattern.compile("(@.*?|.*?)(#.*?#)",Pattern.DOTALL).
matcher(originalMeaning);
注意贪婪匹配,比如上面的.*?#匹配abc#def#ddf如果不加上?的话就是贪婪匹配,会匹配所有的字符的得到abc#def#而不是abc#,需要加上?才行
对表达式取或 是这种方式,(rgxa|rgxb),一般的字符用或是[abc];
替换分组,可以保留查找到的分组,替换其余的,比如
String repleceS = "$1" + objItemValue;
matcher.appendReplacement(sbBuffer,repleceS);
会保留文本串中(@.*?|.*?)
匹配的部分,而替换其余的
匹配行首^
,匹配行尾$
API中提供的方法别忘了:
reset传入新的文本串进行匹配,不用Patter再创建一个对象,效率高
lookingAt 匹配开始部分
规则表:
可以归为两个部分操作运算数 和 运算符, 之所以叫正则表达式,和数学的表达式类似。
运算数 转义符 边界匹配符(当然还有一般字符)
运算符 逻辑运算 数量运算
1、转义符
符号 | 含义 |
---|---|
\ | 反斜线字符(反斜杠在语言中本身作为转义符的,得用2根 \ 表示,所以这里要用 \\) |
\r | 回车符 (‘\u000D’) |
\n | 新行(换行)符 (‘\u000A’) |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 下划线的任何单词字符:[a-zA-Z0-9_] |
\W | 非单词字符:[^\w] |
3、边界匹配符
符号 | 含义 |
---|---|
|
行的开头 |
$ | 行的结尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
2、运算
符号 | 含义 |
---|---|
[abc] | a、b 或 c |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | 到 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](差集) |
X | Y |
(rgxa | rgxb) |
(X) | X,作为捕获组 |
4、数量
符号 | 含义 |
---|---|
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |