Android 正则表达式

    技术2022-05-20  49

    Java正则表达式学习: 因为正则表达式是一个很庞杂的体系,此例仅举些入门的概念,更多的请参阅相关书籍及自行摸索。

    // 反斜杠 /t 间隔 ('/u0009') /n 换行 ('/u000A') /r 回车 ('/u000D') /d 数字 等价于[0-9] /D 非数字 等价于[^0-9] /s 空白符号 [/t/n/x0B/f/r] /S 非空白符号 [^/t/n/x0B/f/r] /w 单独字符 [a-zA-Z_0-9] /W 非单独字符 [^a-zA-Z_0-9] /f 换页符 /e Escape /b 一个单词的边界 /B 一个非单词的边界 /G 前一个匹配的结束

    ^为限制开头 ^java     条件限制为以Java为开头字符 $为限制结尾 java$     条件限制为以java为结尾字符 . 条件限制除/n以外任意一个单独字符 java..     条件限制为java后除换行外任意两个字符

    加入特定限制条件「[]」 [a-z]     条件限制在小写a to z范围中一个字符 [A-Z]     条件限制在大写A to Z范围中一个字符 [a-zA-Z] 条件限制在小写a to z或大写A to Z范围中一个字符 [0-9]     条件限制在小写0 to 9范围中一个字符 [0-9a-z] 条件限制在小写0 to 9或a to z范围中一个字符 [0-9[a-z]] 条件限制在小写0 to 9或a to z范围中一个字符(交集)

    []中加入^后加再次限制条件「[^]」 [^a-z]     条件限制在非小写a to z范围中一个字符 [^A-Z]     条件限制在非大写A to Z范围中一个字符 [^a-zA-Z] 条件限制在非小写a to z或大写A to Z范围中一个字符 [^0-9]     条件限制在非小写0 to 9范围中一个字符 [^0-9a-z] 条件限制在非小写0 to 9或a to z范围中一个字符 [^0-9[a-z]] 条件限制在非小写0 to 9或a to z范围中一个字符(交集)

    在限制条件为特定字符出现0次以上时,可以使用「*」 J*     0个以上J .*     0个以上任意字符 J.*D     J与D之间0个以上任意字符

     在限制条件为特定字符出现1次以上时,可以使用「+」 J+     1个以上J .+     1个以上任意字符 J.+D     J与D之间1个以上任意字符

    在限制条件为特定字符出现有0或1次以上时,可以使用「?」 JA?     J或者JA出现

    限制为连续出现指定次数字符「{a}」 J{2}     JJ J{3}     JJJ 文字a个以上,并且「{a,}」 J{3,}     JJJ,JJJJ,JJJJJ,???(3次以上J并存) 文字个以上,b个以下「{a,b}」 J{3,5}     JJJ或JJJJ或JJJJJ 两者取一「|」 J|A     J或A Java|Hello     Java或Hello

    「()」中规定一个组合类型 比如,我查询<a href=/"index.html/">index</a>中<a href></a>间的数据,可写作<a.*href=/".*/">(.+?)</a>

    在使用Pattern.compile函数时,可以加入控制正则表达式的匹配行为的参数: Pattern Pattern.compile(String regex, int flag)

    flag的取值范围如下: Pattern.CANON_EQ     当且仅当两个字符的"正规分解(canonical decomposition)"都完全相同的情况下,才认定匹配。比如用了这个标志之后,表达式"a/u030A"会匹配"?"。默认情况下,不考虑"规 范相等性(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)     在这个模式下,只有'/n'才被认作一行的中止,并且与'.','^',以及'$'进行匹配。

     view plaincopy to clipboardprint?01.抛开空泛的概念,下面写出几个简单的Java正则用例:    02.  03.◆比如,在字符串包含验证时    04.  05.//查找以Java开头,任意结尾的字符串    06.Pattern pattern = Pattern.compile("^Java.*");    07.Matcher matcher = pattern.matcher("Java不是人");    08.boolean b= matcher.matches();    09.//当条件满足时,将返回true,否则返回false    10.System.out.println(b);    11.  12.  13.◆以多条件分割字符串时    14.Pattern pattern = Pattern.compile("[, |]+");    15.String[] strs = pattern.split("Java Hello World Java,Hello,,World|SUN");    16.for (int i=0;i<strs.length;i++) {    17.    System.out.println(strs[i]);    18.}    19.  20.◆文字替换(首次出现字符)    21.Pattern pattern = Pattern.compile("正则表达式");    22.Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");    23.//替换第一个符合正则的数据    24.System.out.println(matcher.replaceFirst("Java"));    25.  26.◆文字替换(全部)    27.Pattern pattern = Pattern.compile("正则表达式");    28.Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");    29.//替换第一个符合正则的数据    30.System.out.println(matcher.replaceAll("Java"));    31.  32.  33.◆文字替换(置换字符)    34.Pattern pattern = Pattern.compile("正则表达式");    35.Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World ");    36.StringBuffer sbr = new StringBuffer();    37.while (matcher.find()) {    38.    matcher.appendReplacement(sbr, "Java");    39.}    40.matcher.appendTail(sbr);    41.System.out.println(sbr.toString());    42.  43.◆验证是否为邮箱地址    44.  45.String str="ceponline@yahoo.com.cn";    46.Pattern pattern = Pattern.compile("[//w//.//-]+@([//w//-]+//.)+[//w//-]+",Pattern.CASE_INSENSITIVE);    47.Matcher matcher = pattern.matcher(str);    48.System.out.println(matcher.matches());    49.  50.◆去除html标记    51.Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);    52.Matcher matcher = pattern.matcher("<a href="/" mce_href="/""index.html/">主页</a>");    53.String string = matcher.replaceAll("");    54.System.out.println(string);    55.  56.◆查找html中对应条件字符串    57.Pattern pattern = Pattern.compile("href=/"(.+?)/"");    58.Matcher matcher = pattern.matcher("<a href="/" mce_href="/""index.html/">主页</a>");    59.if(matcher.find())    60.System.out.println(matcher.group(1));    61.}    62.  63.◆截取http://地址    64.//截取url    65.Pattern pattern = Pattern.compile("(66.Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");    67.StringBuffer buffer = new StringBuffer();    68.while(matcher.find()){                 69.    buffer.append(matcher.group());           70.    buffer.append("/r/n");                 71.System.out.println(buffer.toString());    72.}    73.           74.◆替换指定{}中文字    75.  76.String str = "Java目前的发展史是由{0}年-{1}年";    77.String[][] object={new String[]{"//{0//}","1995"},new String[]{"//{1//}","2007"}};    78.System.out.println(replace(str,object));    79.  80.public static String replace(final String sourceString,Object[] object) {    81.            String temp=sourceString;       82.            for(int i=0;i<object.length;i++){    83.                      String[] result=(String[])object[i];    84.               Pattern    pattern = Pattern.compile(result[0]);    85.               Matcher matcher = pattern.matcher(temp);    86.               temp=matcher.replaceAll(result[1]);    87.            }    88.            return temp;    89.}    90.  91.  92.◆以正则条件查询指定目录下文件    93.  94.//用于缓存文件列表    95.        private ArrayList files = new ArrayList();    96.        //用于承载文件路径    97.        private String _path;    98.        //用于承载未合并的正则公式    99.        private String _regexp;    100.           101.        class MyFileFilter implements FileFilter {    102.  103.            /**   104.               * 匹配文件名称   105.               */    106.            public boolean accept(File file) {    107.                try {    108.                  Pattern pattern = Pattern.compile(_regexp);    109.                  Matcher match = pattern.matcher(file.getName());                   110.                  return match.matches();    111.                } catch (Exception e) {    112.                  return true;    113.                }    114.            }    115.            }    116.           117.        /**   118.        * 解析输入流   119.        * @param inputs   120.        */    121.        FilesAnalyze (String path,String regexp){    122.            getFileName(path,regexp);    123.        }    124.           125.        /**   126.        * 分析文件名并加入files   127.        * @param input   128.        */    129.        private void getFileName(String path,String regexp) {    130.            //目录    131.              _path=path;    132.              _regexp=regexp;    133.            File directory = new File(_path);    134.            File[] filesFile = directory.listFiles(new MyFileFilter());    135.            if (filesFile == null) return;    136.            for (int j = 0; j < filesFile.length; j++) {    137.                files.add(filesFile[j]);    138.            }    139.            return;    140.            }    141.       142.        /**   143.         * 显示输出信息   144.         * @param out   145.         */    146.        public void print (PrintStream out) {    147.            Iterator elements = files.iterator();    148.            while (elements.hasNext()) {    149.                File file=(File) elements.next();    150.                    out.println(file.getPath());       151.            }    152.        }    153.  154.        public static void output(String path,String regexp) {    155.  156.            FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);    157.            fileGroup1.print(System.out);    158.        }    159.       160.        public static void main (String[] args) {    161.            output("C://","[A-z|.]*");    162.        }  

    http://blog.csdn.net/pilou5400/archive/2010/12/08/6062477.aspx


    最新回复(0)