理解正则表达式
来源:互联网 发布:吴淑娴 网络翻译 编辑:程序博客网 时间:2024/04/29 15:30
public static void main(String[] args) { //简单认识 /** p("aa".matches("..."));//一个点就是一个字符。默认情况下.*中的.只能匹配出\n以外的字符,如果遇到要匹配的字符串包含回车换行符(多行),则正则表达式遇到换行符后会停止,导致包含回车换行符的串不能正确匹配,解决的办法是: 1、使用Pattern和Matcher对象 设置Pattern模式为:Pattern.DOTALL 2、使用String.replaceAll() 正则表达式写法: String reg = "(?s)'.*'"; p("12313".matches("\\d{5}"));//一个\\d就代表一个数字。 p("asdfasdf887sfa000asf".replaceAll("\\d","-")); Pattern p = Pattern.compile("[0-9]{3}"); Matcher m = p.matcher("224998");//匹配之后,会存在一个Matcher中。 while(m.find()) { System.out.println(m.group()); } **/ // 初步认识. * + ? /** p("a".matches(".")); p("aa".matches("aa")); p("aaaaaa".matches("a*"));//0或者1次及以上 p("aaa".matches("a+"));//至少出现1次 p("aa".matches("a?"));//1个或者0个。 p("".matches("a?"));//即a有可能不出现,或者出现1次。 p("92834".matches("\\d{3,}"));//至少出现3次,没有上限; p("9888".matches("\\d{3,4}"));//至少出现3次数字,但是不能超过4个。 p("127.0.0.1".matches("[1-9]{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));//ip地址 p("192".matches("[0-2][0-9][0-9]")); **/ // 范围 /* p("a".matches("[abc]")); p("abc".matches("[^abc]"));//小尖号在[]前面的话,说明是开头的意思。如果是在字符前,那就是取反。 p("A".matches("[a-zA-Z0-9]")); p("A".matches("[a-z]|[A-Z]"));//a-z或者A-Z都行。另一种写法是:[a-z[A-Z]] p("R".matches("[a-z&&[RGB]]"));//a-z而且R\G\B三者之一; */ // 认识\s \w \d \ // \s 代表所有空格[ \t\n\x0B\f\r] 大写的\S代表\s的取反。其它的大写都同理。 // \w 代表单词字符[a-zA-Z0-9_] // \d 代表数字 [0-9] /* p(" \t\n\r".matches("\\s{4}"));//四个空格符。(包含所有空格符) p(" ".matches("\\S"));//非空格 p("8_9".matches("\\w{3}"));//3个字符 p("abcsf231313&^%$$".matches("[a-z]+\\d+[&^%$]+")); p("\\".matches("\\\\")); */ // POSIX class预定义的字符串 // p("asdfsd".matches("\\p{Lower}*"));//代表[a-z]。还有其它的。比较方便,还有其它类型。 // 边界 。开头^和结尾$ \\b代表是单词的边界(即空格什么的、换行、特殊字符等等) // p("hello".matches("^h[a-z]*o$")); // 空格([\s&&[^\n]]指的是空格但不是换行符)、以\n换行符结尾。 // p(" \n".matches("^[\\s&&[^\\n]]*\\n$")); /* //find and lookingAt(find是找符合正则表达式的子串,只要找到一个子串,查找引擎就会把原串已经找到的子串去掉。而matches是整体匹配) Pattern p = Pattern.compile("\\d{3,5}"); String s = "123-32311-2343-00"; Matcher m2 = p.matcher(s); m2.matches();//逻辑是一个字符一个字符进行匹配,匹配到123-时,就已经发现不满足\\d{3,5}这个要求了,但是已经匹配过的字符已经没有了。 // 所以当m2.matches()后,已经只有32311-2343-00了。 m2.reset();//通过这个方法可以实现查找引擎回归原始状态; m2.find(); // 先找第一个串; p(m2.start()+"-" + m2.end());//打印起始位置和结束位置; m2.find();// 再找第二个串; m2.find();//再找第三个串。。。。。 m2.lookingAt();//意思是每次从字符串的开始位置的开始查找。 **/ //替换 Pattern replace = Pattern.compile("java", Pattern.CASE_INSENSITIVE);//不区分大小写的意思。 String replaceStr = "lsdkfJava asfJAVA jAva bbb"; Matcher replaceMatcher = replace.matcher(replaceStr); /*while(replaceMatcher.find()) { p(replaceMatcher.group()); }*/ //p(replaceMatcher.replaceAll("C++")); // 将字符串出现的偶数子串用大写替换。奇数用小写替换;利用replacement; StringBuffer buf = new StringBuffer(); int i = 0 ; while (replaceMatcher.find()) { i++; if(i % 2 == 0){ replaceMatcher.appendReplacement(buf, "JAVA"); }else { replaceMatcher.appendReplacement(buf, "java"); } } replaceMatcher.appendTail(buf); //如果不加这个方法,只到最后一个Java,后面的bbb就会不见了。 p(buf.toString()); // 分组。分组是用小括号包括的。如果要看几组,就看有几个小括号即可。 // qulifiers限定语。比如有正则表达式: // (.{3,10})? 先吃进去3个,判断是否符合正则表达式,如果符合,则退出。如果没有,则继续向后找,直到找到为止。 // (.{3,10})+ 先吃进去10个,判断是否符合正则表达式,如果符合,则退出。如果没有,则不再找,马上退出。 nonCupturing(); } private static void nonCupturing() { String regex = "(.{3})(?=a)";// 找3个字符,以a结尾的子串。上面有说,如果有小括号,那就是分组, // 但是这里有一种特殊情况是小括号里以问号开头,则是一种特殊的形式。 Pattern p = Pattern.compile(regex); Matcher m = p.matcher("33abb4"); while (m.find()) { p(m.group()); } } private static void black() { //向前引用:(//d//d)//1 其中//1表示找到2个数字,group1后面的数字要和group1一模一样。 // (//d(//d))//2 其中//2表示group2后面的数字要和group2一模一样。 // flags的简写 比如忽略大小写:(?i)(java) } private static void p(Object o) { System.out.println(o); }
0 0
- 理解正则表达式
- 理解正则表达式
- 理解正则表达式
- 怎么理解正则表达式
- 正则表达式group理解
- 深入理解正则表达式
- 轻松理解正则表达式
- 理解正则表达式
- 正则表达式的理解
- 正则表达式replace理解
- 正则表达式的理解
- 理解正则表达式<前言>
- 如何理解正则表达式
- 简单理解正则表达式
- 正则表达式理解
- 深入理解正则表达式
- 深入理解正则表达式
- 深入理解正则表达式
- FSP相关笔记
- openstack 密码注入之cloud-init 简单介绍
- ddos之icmp洪泛攻击源代码
- JAVA继承
- Maven导入工程出现的一些问题解决办法
- 理解正则表达式
- 【死磕Java并发】-----J.U.C之Condition
- Apache Jmeter总结
- 从Oracle到MySQL,余额宝云实践分享
- SYSBIOS学习笔记---软件中断(SWI)的创建
- 保护大文件传输安全的四个方法
- Fastclick.js日期插件中的input控件无法被触发
- java数据类型总结
- pyhton 去掉字符串前边的u''