正则表达式

来源:互联网 发布:15年股灾真相知乎 编辑:程序博客网 时间:2024/06/05 15:12

                                                           正则表达式

一、字符解释

1、^为限制开头

         ^java :条件限制为 java 为开头的字符。

2、$为限制结尾

          java$  :条件限制为以 java 为结尾符。

3、 \

        将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。

4、?

        匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。

5、*

      匹配前面的子表达式零次或多次(大于等于0次)。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。

6、+

   匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。

7、{n}

    n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

8、点.

     匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。

9、x|y

      匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。

10、[^abc]

      负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。

11、[a-z]

       字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。

注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.

12、\b

      能匹配一个单词的边界,例如 er\b 能匹配到nerver的er ,但不能匹配“verb”中的“er”。

13、\B

      匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。

14、\d

      匹配一个数字字符,相当于[0-9]

15、\D

      匹配一个非数字字符,相当于[^0-9]

16、\w

      匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。

17、\W

       匹配任何非单词字符。等价于“[^A-Za-z0-9_]

18、|

       将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。

19、\( \)

        将 \( 和 \) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。

20、\s

        匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

21、\S     

        匹配任何非空白字符。等价于[^ \f\n\r\t\v]。
22、\f
        匹配一个换页符。
23、\n
        匹配一个换行符
24、\r
        匹配一个回车符



     




    





◆ 比如,在字符串包含验证时// 查找以 Java 开头 , 任意结尾的字符串  Pattern pattern = Pattern.compile("^Java.*");  Matcher matcher = pattern.matcher("Java 不是人 ");  boolean b= matcher.matches();  // 当条件满足时,将返回 true ,否则返回 false  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(" 正则表达式 Hello World, 正则表达式 Hello World");// 替换第一个符合正则的数据System.out.println(matcher.replaceFirst("Java"));◆ 文字替换(全部)Pattern pattern = Pattern.compile(" 正则表达式 ");Matcher matcher = pattern.matcher(" 正则表达式 Hello World, 正则表达式 Hello World");// 替换第一个符合正则的数据System.out.println(matcher.replaceAll("Java"));◆ 文字替换(置换字符)Pattern pattern = Pattern.compile(" 正则表达式 ");Matcher matcher = pattern.matcher(" 正则表达式 Hello World, 正则表达式 Hello World ");StringBuffer sbr = new StringBuffer();while (matcher.find()) {    matcher.appendReplacement(sbr, "Java");}matcher.appendTail(sbr);System.out.println(sbr.toString());◆ 验证是否为邮箱地址String str="ceponline@yahoo.com.cn";Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);Matcher matcher = pattern.matcher(str);System.out.println(matcher.matches());◆ 去除 html 标记Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);Matcher matcher = pattern.matcher("<a href=\"index.html\"> 主页 </a>");String string = matcher.replaceAll("");System.out.println(string);◆ 查找 html 中对应条件字符串Pattern pattern = Pattern.compile("href=\"(.+?)\"");Matcher matcher = pattern.matcher("<a href=\"index.html\"> 主页 </a>");if(matcher.find())  System.out.println(matcher.group(1));}◆ 截取 http:// 地址// 截取 urlPattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");StringBuffer buffer = new StringBuffer();while(matcher.find()){                 buffer.append(matcher.group());           buffer.append("\r\n");             System.out.println(buffer.toString());}       ◆ 替换指定 {} 中文字String str = "Java 目前的发展史是由 {0} 年 -{1} 年 ";String[][] object={new String[]{"\\{0\\}","1995"},new String[]{"\\{1\\}","2007"}};System.out.println(replace(str,object));public static String replace(final String sourceString,Object[] object) {            String temp=sourceString;               for(int i=0;i<object.length;i++){                      String[] result=(String[])object[i];               Pattern    pattern = Pattern.compile(result[0]);               Matcher matcher = pattern.matcher(temp);               temp=matcher.replaceAll(result[1]);            }            return temp;}◆ 以正则条件查询指定目录下文件 // 用于缓存文件列表        private ArrayList files = new ArrayList();        // 用于承载文件路径        private String _path;        // 用于承载未合并的正则公式        private String _regexp;               class MyFileFilter implements FileFilter {              /**               * 匹配文件名称               */              public boolean accept(File file) {                try {                  Pattern pattern = Pattern.compile(_regexp);                  Matcher match = pattern.matcher(file.getName());                                 return match.matches();                } catch (Exception e) {                  return true;                }              }            }               /**         * 解析输入流         * @param inpu/* 主要是为了能找出在一次匹配中你更关心的部分。 *  捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 "(x)(y\\w*)(z)" 中,存在三个这样的组: 1.   x2.   y\\w*3.   z*/  //m.group(2) return y123 y456  //m.group()  return  xy123z xy456z  @Test  public void test3(){      String regex = "(x)(y\\w*)(z)";      String input = "exy123z,xy456z";      Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);      Matcher m = p.matcher(input);      while (m.find()) {//         System.out.println(m.group(2));//         System.out.println(m.groupCount());         System.out.println(m.group());      }        }




0 0
原创粉丝点击