社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
2016.7.15
上面是拼接字符串时常用的两种方法,它们的匹配参数字符串都是正则表达式的字符串,regex就是正则表达式。
处理字符串的时候,如果能够灵活熟练的使用正则表达式,就可以很方便的对程序表达出你的匹配逻辑,而不用写一大堆逻辑判断、复杂处理,还很容易出错和匹配不全。
正则表达式中一些字符已经被赋予了特殊的含义,想要匹配他们就要使用转义字符。
例如想匹配+加号,就需要用+,但是我们又是用字符串来输入这个正则表达式,字符串中也是转义字符,所以我们需要用\来表示,即匹配+加号,我们需要用\+。
//当代码为
String str = "abc+xyz";
str=str.replaceAll("+", "-");
System.out.println(str);
//运行结果为异常
Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
//当代码为
String str = "abc+xyz";
str=str.replaceAll("\+", "-");
System.out.println(str);
//运行结果为
abc-xyz
例如你想替换字符串"This is good."中的"is"单词为"is not",那显然不能直接匹配"is"。
如果用一般的逻辑去写,首先要检查是否存在"is"单词,这就要考虑它的前后是否全为非字母或没有字符;
然后最好要一起替换所有的"is",但显然很难一起替换,那就依次替换,依次替换就需要有所有"is"单词的索引,替换一次后字符串长度又会变,索引也要相应的增长;
替换完后,返回新的字符串。
这样是不是感觉很麻烦,脑子有点混乱。
如果我们用上正则表达式就很不一样了,会轻松很多。
return str.replaceAll("\bis\b", "is not");
b代表了一个单词的边界,我们将它们组合起来bisb就是is单词了,以为以字符串输入,所有要在转义把一下,regex就是"\bis\b".
看,是不是逻辑很清晰,方法很简单。
当然前提是你能组合出组合匹配条件的正则表达式。
转义字符 | 意义 |
---|---|
+ | 加号 |
. | 点 |
? | 问号 |
* | 星号 |
\ | 反斜杠 |
( ) | 圆括号 |
[ ] | 方括号 |
{ } | 大括号 |
竖线 | |
$ | 美元 |
^ | 乘方 |
t | 间隔 ('u0009') |
n | 换行 ('u000A') |
r | 回车 ('u000D') |
d | 数字 等价于 [0-9] |
D | 非数字 等价于 [^0-9] |
s | 空白符号 [tnx0Bfr] |
S | 非空白符号 [^tnx0Bfr] |
w | 单独字符 [a-zA-Z_0-9] |
W | 非单独字符 [^a-zA-Z_0-9] |
f | 换页符 |
e | Escape |
b | 一个单词的边界 |
B | 一个非单词的边界 |
G | 前一个匹配的结束 |
^java 条件限制为以 Java 为开头字符
java$ 条件限制为以 java 为结尾字符
java.. 条件限制为 java 后除换行外任意两个字符
[a-z] 条件限制在小写 a to z 范围中一个字符
[A-Z] 条件限制在大写 A to Z 范围中一个字符
[a-zA-Z] 条件限制在小写 a to z 或大写 A to Z 范围中一个字符
[0-9] 条件限制在小写 0 to 9 范围中一个字符
[0-9a-z] 条件限制在(小写 0 to 9 或 a to z )范围中一个字符
[0-9[a-z]] 条件限制在(小写 0 to 9 )或 (小写 a to z )范围中一个字符 ( 交集 )
[^a-z] 条件限制在非小写 a to z 范围中一个字符
[^A-Z] 条件限制在非大写 A to Z 范围中一个字符
[^a-zA-Z] 条件限制在非小写 a to z 或大写 A to Z 范围中一个字符
[^0-9] 条件限制在非小写 0 to 9 范围中一个字符
[^0-9a-z] 条件限制在非(小写 0 to 9 或 a to z )范围中一个字符
[^0-9[a-z]] 条件限制在(非小写 0 to 9 )或 (小写 a to z )范围中一个字符 ( 交集 )
J* 0 个以上 J
.* 0 个以上任意字符
J.*D J 与 D 之间 0 个以上任意字符
J+ 1 个以上 J
.+ 1 个以上任意字符
J.+D J 与 D 之间 1 个以上任意字符
JA? J 或者 JA 出现
J{2} JJ
J{3} JJJ
J{3,} JJJ,JJJJ,JJJJJ,??? (3 次以上 J 并存 )
J{3,5} JJJ 或 JJJJ 或 JJJJJ
J|A J 或 A
Java|Hello Java 或 Hello
学习文章:关于java中split的使用
学习文章:java 需要转义的一些特殊符号。
学习文章:JAVA中转义字符
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!