1.正则表达式中的常用字符
https://www.cnblogs.com/kuqs/p/5727409.html
https://www.cnblogs.com/zery/p/3438845.html
2.正则表达式中的类Pattern和Matcher
http://blog.csdn.net/kofandlizi/article/details/7323863
Pattern和Matcher是java在1.4之后对正则表达式提供支持而推出的两个类。
-
Pattern类的作用在于编译正则表达式后创建一个匹配模式.(作用于正则表达式)
Pattern compile = Pattern.compile(regex);
regex为String类型的正则表达式
-
Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配(作用于需要进行匹配的源代码)
Matcher m = compile.matcher(line);
line为用BufferedReader读取的Line
然后可以对Matcher的对象m进行操作
完整代码如下
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; /* * 网页爬虫测试:获取某网页中的QQ邮箱 */ public class spiderTest { public static void main(String[] args) throws IOException { //1、读取网页内容(即用IO流获取我保存的html文档) File f = new File("D:\aa.txt"); BufferedReader br = new BufferedReader(new FileReader(f)); //2、匹配规则:qq邮箱 String regex = "[1-9][0-9]{5,10}@qq.com";//匹配的qq邮箱正则表达式 //3、开始获取: Pattern compile = Pattern.compile(regex); String line = null; while ((line = br.readLine()) != null) {//读取html中的数据 Matcher m = compile.matcher(line); //匹配器 while (m.find()) { System.out.println(m.group());//打印匹配到的qq邮箱 } } br.close();//关闭IO流 } }
3.常用的一些方法-Pattern
- Pattern complie(String regex)
- Pattern compile(String regex, int flags)
-
int flags() 返回当前Pattern的匹配flag参数.
flag参数用来控制正则表达式的匹配行为,可取值范围如下:
Pattern.CANON_EQ 当且仅当两个字符的”正规分解(canonical decomposition)”都完全相同的情况下,才认定匹配.比如用了这个标志之后,表达式”au030A”会匹配”?”.默认情况下,不考虑”规范相等性(canonical equivalence)”.
Pattern.CASE_INSENSITIVE(?i) 默认情况下,大小写不明感的匹配只适用于US-ASCII字符集.这个标志能让表达式忽略大小写进行匹配.要想对Unicode字符进行大小不明感的匹 配,只要将UNICODE_CASE与这个标志合起来就行了.
Pattern.COMMENTS(?x) 在这种模式下,匹配时会忽略(正则表达式里的)空格字符(译者注:不是指表达式里的”s”,而是指表达式里的空格,tab,回车之类).注释从#开始,一直到这行结束.可以通过嵌入式的标志来启用Unix行模式.
Pattern.DOTALL(?s)在这种模式下,表达式’.’可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式’.’不匹配行的结束符.
Pattern.MULTILINE(?m)在这种模式下,’^’和’$’分别匹配一行的开始和结束.此外,’^’仍然匹配字符串的开始,’$’也匹配字符串的结束.默认情况下,这两个表达式仅仅匹配字符串的开始和结束.
Pattern.UNICODE_CASE(?u) 在这个模式下,如果你还启用了CASE_INSENSITIVE标志,那么它会对Unicode字符进行大小写不明感的匹配.默认情况下,大小写不敏感的匹配只适用于US-ASCII字符集.
Pattern.UNIX_LINES(?d) 在这个模式下,只有’ ’才被认作一行的中止,并且与’.’,’^’,以及’$’进行匹配.
3.Pattern.matcher(CharSequence input) 对指定输入的字符串创建一个Matcher对象
- matches()方法编译给定的正则表达式并且对输入的字串以该正则表达式为模开展匹配,该方法适合于该正则表达式只会使用一次的情况,也就是只进行一次匹配工作,因为这种情况下并不需要生成一个Matcher实例.
4.常用的一些方法-Matcher
- boolean matches() 最常用方法:尝试对整个目标字符展开匹配检测,也就是只有整个目标字符串完全匹配时才返回真值.
- boolean lookingAt() 对前面的字符串进行匹配,只有匹配到的字符串在最前面才会返回true
- boolean find() 对字符串进行匹配,匹配到的字符串可以在任何位置
- int start() 返回当前匹配到的字符串在原目标字符串中的位置
- int end() 返回当前匹配的字符串的最后一个字符在原目标字符串中的索引位置.
- String group() 返回匹配到的子字符串