黑马程序员技术交流社区

标题: java基础持续更新-------正则表达式 [打印本页]

作者: 青龙李坤    时间: 2015-6-16 22:46
标题: java基础持续更新-------正则表达式
()」中规定一个组合类型
比如,我查询index中间的数据,可写作(.+?)

在使用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'才被认作一行的中止,并且与'.''^',以及'$'进行匹配。
5. 程序示例:
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
public class Test {  
  
    public static void main(String[] args) {  
        //matches()判断字符串是否匹配某个表达式,"."表示任何一个字符  
        p("abc".matches("..."));  
        //将字符串"a2389a"中的数字用*替换,\d 表示“0--9”数字  
        p("a2389a".replaceAll("\\d", "*"));  
        //将任何是a--z的字符串长度为3的字符串进行编译,这样可以加快匹配速度  
        Pattern p = Pattern.compile("[a-z]{3}");  
        //进行匹配,并将匹配结果放在Matcher对象中  
        Matcher m = p.matcher("abc");  
        p(m.matches());  
        //上面的三行代码可以用下面一行代码代替  
        p("abc".matches("[a-z]{3}"));  
    }  
      
    public static void p(Object o){  
        System.out.println(o);  
    }  
}  
运行结果
true  
a****a  
true  
true  
现在通过一些实验来说明正则表达式的匹配规则,这儿是Greedy方式
  .              任何字符
a?             a一次或一次也没有
a*             a零次或多次
a+            a一次或多次
a{n}?      a恰好 n
a{n,}?       a至少n
a{n,m}?   a至少n次,但是不超过m
//初步认识. * + ?  
        p("a".matches("."));//true  
        p("aa".matches("aa"));//true  
        p("aaaa".matches("a*"));//true  
        p("aaaa".matches("a+"));//true  
        p("".matches("a*"));//true  
        p("aaaa".matches("a?"));//false  
        p("".matches("a?"));//true  
        p("a".matches("a?"));//true  
        p("1232435463685899".matches("\\d{3,100}"));//true  
        p("192.168.0.aaa".matches("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"));//false  
        p("192".matches("[0-2][0-9][0-9]"));//true  



作者: 青龙李坤    时间: 2015-6-16 22:50
这是接着上一个的,大家一起加油啊。
作者: 爱李萝卜    时间: 2015-6-17 08:40
多敲代码,多总结,一起加油
作者: 15383016390    时间: 2015-6-17 08:46
总结的很认真,加油哦
作者: Happe_Sun    时间: 2015-6-17 09:20
挺好的~~
作者: 请叫我红领巾    时间: 2015-6-17 20:17
马一个,666
作者: Monster    时间: 2015-6-17 20:26
被正则表达式坑晕了,还没有复习




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2