超简单!正则表达式总结
正则表达式⼩总结
对于正则表达式,⼤学的时候就学过不过因为没有仔细的好好听课,导致⼯作后很长⼀段时间还是不是很熟悉,所以特意抽出个时间来总结⼀下⽤法。
常规匹配⽅式:
String.matcher()⽅法,括号内放正则表达式 java中所有 \ 都需要 \ 双引号
\d:任意⼀个数字0-9
\s:任意⼀个空⽩字符,或换⾏符
\w:任意⼀个字符 0-9 a-z A-Z 或下划线
tip:如果d,s,w为⼤写那么就是求反向
例:\D即匹配⼀个⾮数字
. :表⽰匹配任意⼀个字符,仅限⼀个
如果匹配中⽂就⽤\u####表⽰
a\u548cc可以匹配a和c \u548c 为 ‘和’
\d* 可以匹配认识个字符,包括0字符,即0到任意个
\d+ 匹配1到任意个(⾄少⼀个)
\d? 可以匹配0或⼀个字符例A? 可以匹配空和A
\d{3} 可以匹配3个连着的数字
\d{3,5}可以匹配3-5个连着的数字
\d{{3,}可以匹配3个以上数字
\d{0,3}最多匹配3个数字
[abc]:匹配⽅括号内任意⼀个字符
[a-zA-Z0-9]:匹配指定范围内字符
[^A-F]:指定范围以外字符
A\sB|A\sC|A\sD :匹配 A B或A C或A D
上⾯表达式提取后 A\s(B|C|D)
^匹配开头,美元符号匹配结尾
^在⽅括号内的话代表取反 [^0-9]表⽰匹配⼀个⾮数字
^A\d+B[美元符号]表⽰匹配A开头的B结尾的字符串,中间包含的是任意1到多个数字
分组匹配
分组的话即需要使⽤Pattern类
例⼦:
Pattern p = Patternpile("(\\d{3,4})\\-(\\d{7,8})");
Matcher m = p.matcher("010-********");
if(m.matches()){
String g1 = m.group(1);
String g2 = m.group(2);
System.out.println(g1);
System.out.println(g2);正则表达式提取中文字符
}
得到两个匹配上的⼦串010和12345678。
贪婪匹配
⼀般默认是贪婪匹配,就是⼀个表达式尽可能多的匹配后⾯的字符串
“123000”:3个0
“10100”:2个0
“1001”:0个0
如(\d+)(0*)这个的话那么后⾯的(0*)就没⽤了,因为前⾯的\d+就已经把所有的字符串匹配完了,所以分组的时候就只会显⽰⼀个组。这个时候可以在\d+变为\d+?变为⾮贪婪,这样遇到0的时候发现后⾯的0可以匹配\d+就不会再往后匹配了。
tips:(\d??)(9)前项表⽰匹配1个或0个数字后⾯表⽰⾮贪婪,如果是’9999‘的话,就可以分为两组 ”“和”9999“
前⾯就默认为只匹配0个字符。
分割字符串:String.split()
搜索⼦串:Matcher.find()
替换字符串:placeAll()
分割字符串
String.split()⽅法传⼊的正是正则表达式。
“a, b ;; c”.split("[\,\;\s]+"); // { “a”, “b”, “c” }
凡是遇到,;空格都是分割符
搜索字符串
例⼦:
String s ="the quick brown fox jumps over the lazy dog.";
Pattern p = Patternpile("\\wo\\w");
Matcher m = p.matcher(s);
while(m.find()){
String sub = s.substring(m.start(), m.end());
System.out.println(sub);
}
出符合\w0\w的字符串那么只有
brown的row ,fox, dog
\w等于[A-Za-z0-9_] 注意最后⼀个是下划线
替换
例⼦:
String s ="The    quick\t\t brown  fox  jumps  over the  lazy dog.";
String r = s.replaceAll("\\s+"," ");
System.out.println(r);// "The quick brown fox jumps over the lazy dog."
⽤⼀个空格字符串替换调 \s+(这个是代表有⼀个或多个空格字符或者tab)
反向引⽤
例⼦:
String s ="the quick brown fox jumps over the lazy dog.";
String r = s.replaceAll("\\s([a-z]{4})\\s"," <b>$1</b> ");
System.out.println(r);
$1代表是被匹配到的字符串
lazy dog.
the quick brown fox jumps over
over the lazy

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。