编程笔记_JAVA_正则表达式工具
- 2020 年 2 月 18 日
- 笔记
导入类
java.util.regex.Pattern; //模式类:字符串要被匹配的模式
java.util.regex.Matcher;//匹配类:匹配某个字符串所产生的结果,一个字符串中可能有多处匹配
一、捕获组的概念【还不懂】
((A)(B(C)))
1 ((A)(B(C)))
2 (A)
3 (B(C))
4 (C)
二、关键函数
1、matches()和find()的区别
(1)匹配方式不一样
matches() 是拿整个输入的字符串和定义的正则模式匹配;
find() 是包含匹配, 整个输入的字符串包含定义的正则模式.
(2)调用顺序不一致, 结果也会不一致
(3) find()使用后,值会变化
二、示例程序
1、Pattern.compile("[0-9]+").matcher("1234567890").matches()
if(Pattern.compile("[0-9]+").matcher("1234567890").matches()){ // 使用正则
System.out.println("是由数字组成!") ;
}else{
System.out.println("不是由数字组成!") ;
}
2、
Pattern p = Pattern.compile(pat) ; // 实例化Pattern类
Matcher m = p.matcher(str) ; // 实例化Matcher类
if(m.matches()){ // 进行验证的匹配,使用正则
System.out.println("日期格式合法!") ;
}else{
System.out.println("日期格式不合法!") ;
}
3、带有find()和group()的用法
public String getUserid(String iniWeibo) {
String userid = null;
Pattern puserid = Pattern.compile("href=\\"http:\\/\\/weibo.com\\/u\\/[0-9]{10}");
Matcher muserid = puserid.matcher(iniWeibo);
if(muserid.find()){
userid = muserid.group();
userid = userid.substring(userid.indexOf("u")+3, userid.indexOf("u")+13);
}
return userid;
}
三、String类自带的正则表达式操作
1、str.replaceAll(pat)
String str1 = "A1B22C333D4444E55555F".replaceAll("\d+","_") ;
2、str.matches(pat)
boolean temp = "1983-07-27".matches("\d{4}-\d{2}-\d{2}") ;
3、str.split(pat)
String s[] = "A1B22C333D4444E55555F".split("\d+") ;
四、常用函数
1、p.split(str)
String str = "A1B22C333D4444E55555F" ; // 指定好一个字符串
String pat = "\d+" ; // 指定好正则表达式
Pattern p = Pattern.compile(pat) ; // 实例化Pattern类
String s[] = p.split(str) ; // 执行拆分操作
2、m.replaceAll(str)
String str = "A1B22C333D4444E55555F" ; // 指定好一个字符串
String pat = "\d+" ; // 指定好正则表达式
Pattern p = Pattern.compile(pat) ; // 实例化Pattern类
Matcher m = p.matcher(str) ; // 实例化Matcher类的对象
String newString = m.replaceAll("_") ;//执行替换操作
五、需要注意的字符
\\" ————————" ———————— "
.+? ———–任意字符
\d————任意数字
\|———— |
六、重要匹配
w 包括大小写字母和数字 W
s S
d 数字 D 非数字
http://www.nowamagic.net/librarys/veda/detail/1038
贪婪匹配
它会匹配尽可能多的字符。它首先看整个字符串,如果不匹配,对字符串进行收缩;遇到可能匹配的文本,停止收缩,对文本进行扩展,当发现匹配的文本时,它不着急将该匹配保存到匹配集合中,而是对文本继续扩展,直到无法继续匹配 或者 扩展完整个字符串,然后将前面最后一个符合匹配的文本(也是最长的)保存起来到匹配集合中。所以说它是贪婪的
惰性匹配
它会匹配尽可能少的字符,它从第一个字符开始找起,一旦符合条件,立刻保存到匹配集合中,然后继续进行查找。所以说它是懒惰的。
贪婪匹配 |
惰性匹配 |
匹配描述 |
---|---|---|
? |
?? |
匹配 0 个或 1 个 |
+ |
+? |
匹配 1 个或多个 |
* |
*? |
匹配 0 个或多个 |
{n} |
{n}? |
匹配 n 个 |
{n,m} |
{n,m}? |
匹配 n 个或 m 个 |
{n,} |
{n,}? |
匹配 n 个或多个 |
单词边界匹配
bmagicb,这个正则匹配,必须以m开头,以c为结尾的字符串。
b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
边界的定义
通常情况下,以 空格、段落首行、段落末尾、逗号、句号 等符号作为边界,值得注意的是,分隔符"-"也可以作为边界。
边界的相对性:
当你对一个普通字符,比如"s",设定边界的时候,它的边界是诸如空格、分隔符、逗号、句号等。
当你对一个边界,比如分隔符"-"或者","等,设定边界的时候,它的边界是普通字符。
1 |
b(,)b |
---|
效果演示
welcome to nowamagic,this magic place!
匹配非单词边界——B
匹配文本首 ^
匹配文本末 $
后向文本引用变换