正则表达式学习笔记(附:Java版示例代码)
具体学习推荐:正则表达式30分钟入门教程
. 除换行符以外的任意字符
\w word,正常字符,可以当做变量名的,字母、数字、下划线、汉字
\s space,空白符
\d digital,数字
\b begin,单词的开始和结束
^ 匹配字符串的开始(整个字符串)
$ 匹配字符串的结束(整个字符串)
? 重复0次或1次
* 重复任意次
+ 重复至少一次
{x} 重复x次
{x,} 重复至少x次
{x,y} 重复x到y次
\ 转义
[xyz] 匹配x或y或z中的一个字符
[A-D1-3] 匹配ABCD123中的一个字符
匹配1|匹配2 分支条件,或,注意:和编程一样,从左到右,一旦匹配1满足,停止匹配
() 分组,把括号里面的东西当做一个整体
\W \S \D \B 和对应的小写\w \s \d \b含义相反
[^abc] 匹配除abc以外的字符
\1 后向引用,重复搜索前面第1个分组匹配的文本。\b(\w+)\b\s+\1\b,匹配类似go go。
(?=exp) 零宽断言:断言自身出现的位置的后面能匹配表达式exp
(?<=exp) 零宽断言:断言自身出现的位置的前面能匹配表达式exp
(?!exp) 负向零宽断言:断言此位置的后面不能匹配表达式exp
(?<!exp) 零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp
*? 重复任意次,但尽可能少重复 ,即让字符数越少越好
+? 重复1次或更多次,但尽可能少重复,即让字符数越少越好
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
Java正则表达式示例代码:
RegEx.java
/* * /* * RegEx * @author ChenMing * @version 2016-7-15 */ import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegEx { public static void main(String[] args) { /*//查找匹配 字符 Java里面\要用\\ Pattern pattern = Pattern.compile("\\w+") ; Matcher matcher = pattern.matcher("xx") ; boolean b = matcher.matches() ; System.out.println(b);*/ /*//分割 按照空格和,分割 Pattern pattern = Pattern.compile(" ,"); String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun"); for (int i=0;i<strs.length;i++) { System.out.println(strs[i]); } */ /*//文字替换 Pattern pattern = Pattern.compile("替换文本"); Matcher matcher = pattern.matcher("被替换文本 adad asdad ad 被替换文本da 被替换文本sd"); System.out.println(matcher.replaceFirst("被替换文本 ")); System.out.println(matcher.replaceAll("被替换文本 "));*/ /*//去除html标记 //Pattern.DOTALL 在这种模式下,表达式'.'可以匹配任意字符,包括表示一行的结束符。默认情况下,表达式'.'不匹配行的结束符。 Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL); Matcher matcher = pattern.matcher("<a href=\"index.html\">主页</a>"); String string = matcher.replaceAll(""); System.out.println(string);*/ } }