正则表达式在Java的使用
- Java中用双反斜杠表示正则中的单反斜杠,所以
\w
必须写成\\w
,其他同理 - 使用spilt分割的时候,匹配的字符会“消失”,即作为分割
下面开始介绍Java里面的正则表达式
1.几个简单的知识:
- 1.\w 小写w 和 大小写字母 数字 下划线 相匹配 (Java编程思想竟然说\w识别单词,害
- 2.\w+ 识别上述字符以及后面的一串满足条件的
- 3.\W 识别其他字符
- 4.\W+ 识别其他字符以及后面的其他字符
- 5.+号如果作为正号需要加\\ 作为后缀不需要
- 6.a\w+表示以a开头的且后面必须跟着上述字符的,比如"a(空格符)" 是不符 合的
\w \W
public class Spilt {
public static void main(String[] args) {
/* \w \w+ \W \W+*/
/*
* 1.\w 小写w 和 大小写字母 数字 下划线 相匹配 (Java编程思想竟然说\w识别单词,害
* 2.\w+ 识别上述字符以及后面的一串满足条件的
* 3.\W 识别其他字符
* 4.\W+ 识别其他字符以及后面的其他字符
* */
String s1="3ap1le pe5cah";
String s2="ap_ple _peach or3nge_";
split(s1,"\\w+");
split(s2,"\\w+");
split(s1,"a\\w+");
split(s2,"a\\w+");
split(s1,"\\W+");
split(s2,"\\W+");
}
public static void split(String s,String regex){
List<String> strings = Arrays.asList(s.split(regex));
System.out.println(regex);
print(strings);
}
public static void print(List<String> list){
System.out.println("--------------");
for(String s:list){
System.out.println(s);
}
System.out.println("--------------");
}
}
这里补充一点需要注意的:
比如如下是一个字符串 ap p,在使用a\\w+
的时候,list的0号元素是null
list.get(0)–> null
list.get(1)–>" "
list.get(2)–>“p”
\d
表示数字字符,利用上面的方法
...
String s3 = "13a 2 3";
split(s3,"\\d+");//一串数字
split(s3,"\\d");//一个数字
...
限定符
-
“+” 至少1次
-
“*” 0次 1次 多次
-
“?” 至多1次
-
{n} n为非负整数 匹配n次
-
{n,} 至少匹配n次
-
{n,m} 至少n次,至多m次
public class Spilt {
public static void main(String[] args) {
//限定符
// "+" 至少1次
split("apple orange","ap+");
split("apple orange","appp+");
// "*" 0次 1次 多次
split("apple orange","ap*");
split("apple orange","appp*");
// "?" 至多1次
split("apple orange","ap?");
// {n} n为非负整数 匹配n次
split("apple","p{2}");//pp
split("apple","p{3}");//ppp
split("apple","p{1}");//p
// {n,} 至少匹配n次
split("apple","p{2,}");//pp
split("apple","p{3,}");//ppp
split("apple","p{1,}");//p
// {n,m} 至少n次,至多m次
split("apple","p{1,2}");//p
split("aple","p{2,3}");//pp
}
public static void split(String s,String regex){
List<String> strings = Arrays.asList(s.split(regex));
System.out.println(regex);
print(strings);
}
public static void print(List<String> list){
System.out.println("--------------");
for(String s:list){
System.out.println(s);
}
System.out.println("--------------");
}
}
限定符
- 限定符 ^(不是非!) $ \B \b
- 行首 ^
- 行尾 $
- 单词边缘 \b
- 非单词边缘 \B
//split()方法看上文
//限定符 ^(不是非!) $ \B \b
split("apple","^apple");//^匹配行首
split("apple","^pl");
split("apple","e$");//$匹配行尾
split("apple","l$");
//单词边缘,即字母和空格的边缘
split("apple orange","l\\b");//单词边缘
split("apple orange","e\\b");
split("apple orange","l\\B");//非单词边缘
split("apple orange","e\\B");
split("apple orange","\\B");
split("apple orange","\\b");
其他
- . 匹配到任何一个单字符
- .* 任何一串单字符
- 在*, +, ? 后面加 ?,可使贪婪型变为非贪婪的
- 字符集合,匹配到[]中的任意一个
- () 括号括住的是一个整体
//split()方法看上文
//. 匹配到任何一个单字符
split("apple",".e");
//.* 任何一串单字符
split("apple>e>","p.*>");//贪婪型,匹配尽可能多
//在* + ? 后面加 ?,可使贪婪型变为非贪婪的
split("apple>e>","p.*?>");//非贪婪型,匹配尽可能少
//字符集合 匹配到[]中的任意一个
split("apple","[a]");
split("apple","[^a]");
split("apple","[aple]");
split("apple","[a-p]");
//() 被括住的是一个整体
split("apple orange","(ap)+");
split("apple orange","ap+");
(未完待续)
来源:CSDN
作者:有趣的io
链接:https://blog.csdn.net/qq_43656529/article/details/99291708