------------- android培训、 java培训、java博客、java学习型技术博客、期待与您交流! -------------正则表达式
定义:符合一定规则的表达式 作用:用于专门操作字符串 特点:用一些特定的符号来表示一些代码操作,简化书写 好处:可以简化对字符串的复杂操作 弊端:符号定义越多,正则越长,阅读性较差 涉及类:Pattern、Matcher正在表达式的四种功能
1、匹配 boolean matches(String regex) 用规则匹配整个字符串,只要有一处不符合规则就返回false 字符串各角标位上字符规则 字符类 [abc] a、b 或 c(简单类) [^abc] 任何字符,除了 a、b 或 c(否定) [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围) [a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) [a-z&&[def]] d、e 或 f(交集) [a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) [a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去) 一个[]表示只有1个字符,[]里面的内容代表该字符所需要符合的规则 例如:[abc]代表该字符串只有1个字符且该字符必须是abc中的1个。 预定义字符类 . 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] 注意:\是一个普通符号,不是转义字符,所以正则表达式中需多加一个\将后\转成普通字符 正则表达式中反斜杠出现都是成对出现 例如:[a-z]\\d 表示该字符串由两个组成且第一个字符是a-z第二字符为0-9数字 字符串长度规则 Greedy 数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次 例如:[a]\\d? 表示第一位为a,第二位可以是数字也可以没有 [z]\\d* 表示第一位为a,后面可零或多个数字 [1-9]\\d{4,14} 表示第一位为非零数字,后面接着有4-14个数字(QQ号匹配) 1[358]\\d{9} 表示第一位为1,第二位为358中1个,后面跟9个数字(手机号匹配) 首位规则 边界匹配器 ^ 行的开头 $ 行的结尾 \b 单词边界 \B 非单词边界 \A 输入的开头 \G 上一个匹配的结尾 \Z 输入的结尾,仅用于最后的结束符(如果有的话) \z 输入的结尾 2、切割 String[] split(String regex) 组:(regex)表示组,组里面封装了regex,且组里面可以内嵌多个组。 第一个左括号为第一组,依次继续;想要使用已有的组,可以通过\n的形式来获取。 见示例 3、替换 String replaceAll(String regex,String replacement) 将一个字符串中符合规则的部分替换成另外一个部分 $特殊符号,用以获取前面组中的规则,例如获取第一组规则,$1; 4、获取 将字符串中符合规则的字串取出 Pattern类,正则表达式的编译表示形式 Matcher类,匹配器,通过解释Pattern类对character sequence执行匹配操作的引擎 步骤 1、将正则表达式封装成对象 static Pattren compile(String regex) 2、让正则对象和要操作的字符串相关联 3、关联后,获取正则匹配引擎 Matcher matcher(charSequence input) 4、通过引擎对符合规则的字串进行操作, boolean find() 找符合规则的字串,有则返回true String group() 找完返回ture,调用此方法将规则取出 总结 1、仅判断字符正确与否,使用匹配 2、将已有字符串变另一个字符串,使用替换 3、按照指定方式将字符串变成多个字符串,使用切割(获取规则以外的子串) 4、获取符合需求的字符字串,使用获取//切割演示 class RegexDemo { public static void main(String[] args) { //以不固定空格数切割该字符 String str1 = "zhangsan lisi wangwu"; String reg1 = "\\s+"; splitDemo(str1,reg1); //用.来切字符串, String str2 = "zhangsan.lisi.wangwu"; String reg2 = "\\."; //注意此处加\\,因为.在正则里面表示任意字符 splitDemo(str2,reg2); //用\\来切 String str3 = "c:\\abc\\a.txt"; String reg3 = "\\\\"; splitDemo(str3,reg3); //按照叠词完成切割 String str4 = "javakkkjavaqqjavazzzzjava"; String reg4 = "(.)\\1+"; //组的应用 splitDemo(str4,reg4); } public static void splitDemo(String str,String reg) { String[] arr = str.split(reg); for(String s : arr) { System.out.println(s); } } }
//替换演示 class RegexDemo { public static void main(String[] args) { //将数字替换成# String str1 = "i312423434love32423you"; String reg1 = "\\d+"; String rep1 = "#"; replaceAllDemo(str1,reg1,rep1); //将叠词替换成单个词 String str2 = "iilllloovvvveyyouuuu"; String reg2 = "(.)\\1+"; String rep2 = "$1"; //$1获取前面第一组的规则 replaceAllDemo(str2,reg2,rep2); } public static void replaceAllDemo(String str,String reg,String rep) { str = str.replaceAll(reg,rep); System.out.println(str); } }
// 获取演示 import java.util.regex.*; class RegexDemo { public static void main(String[] args) { String str = "ming tian fang jia le , da jia ."; String reg = "\\b(\\w+)\\b"; // \b为单词边界 //将正则表达式封装成对象 Pattern p = Pattern.compile(reg); //让正则对象和要操作的字符串相关联,关联后,获取正则匹配引擎 Matcher m = p.matcher(str); //通过引擎对符合规则的字串进行操作, while(m.find()) { System.out.println(m.group()); } } }
//练习 import java.util.regex.*; import java.util.*; class RegexDemo { public static void main(String[] args) { test1(); test2(); checkMail(); } public static void checkMail() { //对邮件地址进行校验 String mail = "abc123@163.com.cn"; String reg1 = "[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\\.[a-zA-Z]+)+"; //较精确匹配 String reg2 = "\\w+@\\w+(\\.\\w+)+";//一般匹配 //(reg)+代表整个规则出现1次或多次,(reg)\\1+代表reg出现1次或多次 System.out.println(mail.matches(reg1)); } public static void test2() { //将IP地进行地址段顺序的排序 String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30"; //在每一段数字的前面加两个0 ip = ip.replaceAll("(\\d+)","00$1"); //每一段数字只保留三位,去掉前面多余的0 ip = ip.replaceAll("0*(\\d{3})","$1"); String[] arr = ip.split(" "); Arrays.sort(arr); for(String ip1 : arr) { ip1 = ip1.replaceAll("0*(\\d+)","$1"); System.out.println(ip1); } } public static void test1() { //将str转成 我要学编程 String str = "我我..我我...我要..要要.要要..学学学...学学...编编编..程程..."; //将.去掉 str = str.replaceAll("\\.",""); //将叠词变成单个字符 str = str.replaceAll("(.)\\1+","$1"); System.out.println(str); } }
------------- android培训 、 java培训 、java博客、java学习型技术博客、期待与您交流! -------------
详情请查看:http://edu.csdn.net/heima/
黑马程序员_正则表达式
最新推荐文章于 2024-09-14 19:53:40 发布