\d:任意一个数字.0~9
\w:任意一个字母或数字或下划线.0~9,a~z,A~Z
\s:表示制表符,换行符,空格等空白字符中任意一个
. :可以匹配任意一个字符(不包括 \n,若匹配 \n 用 [\s\S])
[ab4@]:匹配a或b或4或@
[^ab4@]:匹配a或b或4或@之外的任意一个字符
[f-k]:匹配f到k之间任意一个字符
[f-k3-9]:匹配f到k,3到9之间任意一个字符
除 ^ -外,其他符号包含在中括号中就代表其本身,除非加转义字符·
\d{6}:匹配连续6位数字
\d\d{6}:匹配连续7位数字
(\d\d) {6}:匹配连续12位数字
\d{3,6}:匹配·3~6位数字(贪婪模式:比如1234567)
\d{3,6}?:匹配3~6位数字(非贪婪模式:比如1234567)
? :相当于{0,1},表示出现0或1次
+ :相当于{1,},表示至少出现1次
* :相当于{0,},表示不出现或出现任意次数
^ :与字符串开始的地方匹配:如字符串:asfg wat43 t34tg grg ,^a匹配的是第一个a
$ :与字符串结束的地方匹配:如字符串:asfg wat43 t34tg grg ,g$匹配的是最后一个g
\b:匹配一个单词边界(前面和后面的字符不全是\w)
如字符串:asfg wat4x3 t34tg grg ,wat43\b , x表示\b,左侧4和右侧3都能用 \w表示,所以不能匹配
CASE INSENSITIVE(case insensitive):大小写不敏感,即忽略大小写
SINGLELINE(single line):单行模式:
1.整个文本看作一个字符串,只有一个开头一个结尾
2.使小数点“ . ”可以匹配包含换行符(\n)在内的任意字符
MULTI LINE(multi line):多行模式:
1.每行都是一个字符串,都有开头和结尾
2.在指定MULTI LINE后,如果仅需匹配字符串开头和结尾位置,可以使用\A,\Z
比如\Ai表示匹配第一行(第一个字符串)开头为i,\Zi表示匹配最后一行(最后一个字符串)结尾为i
捕获组 : 例如字符串:goto gogo todo toto,要匹配gogo toto即 ([a-z]{2})\1,[a-z]{2}表示表示每两个单词一 组匹配,通过括号进行分组,并存起来,\1表示表示匹配到的go,to,go和to后面在跟一个go,to才符合要求
非捕获组(?:expression):使用(),但不需要保存()捕获的内容
package RegExp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegExp {
public static void main(String[] args) {
String desStr = getURLContent("http://www.163.com","utf-8");
System.out.println(desStr);
//获取超链接
// Pattern p = Pattern.compile("<a[\\s\\S]+?</a>");//取到超链接的整个内容
// Pattern p = Pattern.compile("href=\".+?\"");//取到超链接的地址
Pattern p = Pattern.compile("href=\"(.+?)\"");//取到超链接的地址,在分组处理
Matcher m = p.matcher(desStr);
while(m.find()) {
System.out.println(m.group());
System.out.println("内容:" + m.group(1));
}
}
/**
* 获得url对应的网页内容
* @param StrUrl
* @return
*/
public static String getURLContent(String StrUrl,String charSet) {
StringBuffer content = new StringBuffer();
String str;
try {
URL url = new URL(StrUrl);
BufferedReader breader = new BufferedReader(new InputStreamReader(url.openStream(),Charset.forName(charSet)));
while((str = breader.readLine()) != null) {
content.append(str);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content.toString();
}
}