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() 是包含匹配, 整个输入的字符串包含定义的正则模式.
(2)调用顺序不一致, 结果也会不一致
(3) find()使用后,值会变化
if(Pattern.compile("[0-9]+").matcher("1234567890").matches()){ // 使用正则
System.out.println("是由数字组成!") ;
}else{
System.out.println("不是由数字组成!") ;
}
Pattern p = Pattern.compile(pat) ; // 实例化Pattern类
Matcher m = p.matcher(str) ; // 实例化Matcher类
if(m.matches()){ // 进行验证的匹配,使用正则
System.out.println("日期格式合法!") ;
}else{
System.out.println("日期格式不合法!") ;
}
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;
}
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}") ;
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------------任意数字
\\|------------ |
\s \S
http://www.nowamagic.net/librarys/veda/detail/1038
它会匹配尽可能多的字符。它首先看整个字符串,如果不匹配,对字符串进行收缩;遇到可能匹配的文本,停止收缩,对文本进行扩展,当发现匹配的文本时,它不着急将该匹配保存到匹配集合中,而是对文本继续扩展,直到无法继续匹配 或者 扩展完整个字符串,然后将前面最后一个符合匹配的文本(也是最长的)保存起来到匹配集合中。所以说它是贪婪的
它会匹配尽可能少的字符,它从第一个字符开始找起,一旦符合条件,立刻保存到匹配集合中,然后继续进行查找。所以说它是懒惰的。
贪婪匹配 | 惰性匹配 | 匹配描述 |
---|---|---|
? | ?? | 匹配 0 个或 1 个 |
+ | +? | 匹配 1 个或多个 |
* | *? | 匹配 0 个或多个 |
{n} | {n}? | 匹配 n 个 |
{n,m} | {n,m}? | 匹配 n 个或 m 个 |
{n,} | {n,}? | 匹配 n 个或多个 |
\bmagic\b,这个正则匹配,必须以m开头,以c为结尾的字符串。
\b是正则表达式规定的一个特殊代码(好吧,某些人叫它元字符,metacharacter),代表着单词的开头或结尾,也就是单词的分界处。虽然通常英文的单词是由空格,标点符号或者换行来分隔的,但是\b并不匹配这些单词分隔字符中的任何一个,它只匹配一个位置。
通常情况下,以 空格、段落首行、段落末尾、逗号、句号 等符号作为边界,值得注意的是,分隔符"-"也可以作为边界。
边界的相对性:
当你对一个普通字符,比如"s",设定边界的时候,它的边界是诸如空格、分隔符、逗号、句号等。
当你对一个边界,比如分隔符"-"或者","等,设定边界的时候,它的边界是普通字符。
1 | \b(,)\b |
---|
效果演示
welcome to nowamagic,this magic place!
匹配文本首 ^
匹配文本末 $
后向文本引用变换