Regex正则表达式

 ------- android培训、java培训、期待与您交流! ----------

 符合一定规则的表达式。
 作用:用于专门操作字符串。
 特点:用一些特定的符号来表示一些代码操作。这样就简化了书写。
 学习正则表达式就是在学习一些特殊符号的使用
 弊端:符号定义越多,正则越长,阅读性越差。((()())())
 
 注意:在写比较复杂的正则表达式时要进行多次全面测试
具体操作功能:
 1.匹配:String matches( String regex ),用规则匹配整个字符串,只要有一处不符合则返回false
  用的就是Pattern和Mathcer这两个对象来完成的
  public static void method_1()
  {
   //用正则获取Pattern对象
   Pattern p = Pattern.compile( "[1-9]\\d{4,14}" );
   String s = "1234567";
   //将Pattern对象与字符串关联得到一个匹配器
   Matcher m = p.matcher( s );
   System.out.println( m.matches() );
  }
  字符类
  [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](减去)
  
  预定义字符类
  . 任何字符(与行结束符可能匹配也可能不匹配)
  \d 数字:[0-9]
  \D 非数字: [^0-9]
  \s 空白字符:[ \t\n\x0B\f\r]
  \S 非空白字符:[^\s]
  \w 单词字符:[a-zA-Z_0-9]  ------------------》数字字母下划线,用于邮箱注册
  \W 非单词字符:[^\w]
  Greedy 数量词
  X? X,一次或一次也没有
  X* X,零次或多次
  X+ X,一次或多次
  X{n} X,恰好 n 次
  X{n,} X,至少 n 次
  X{n,m} X,至少 n 次,但是不超过 m 次   /d{4,14}
  边界匹配器
  ^ 行的开头
  $ 行的结尾
  \b 单词边界
  \B 非单词边界
  \A 输入的开头
  \G 上一个匹配的结尾
  \Z 输入的结尾,仅用于最后的结束符(如果有的话)
  \z 输入的结尾

 2.切割
  1.aa   bb         cc 如果一个字符串空格不确定" +"表示用一个或多个空格切割
  2.'.'字符点被正则表达式用来表示任意字符,所以在切割.时需要用转义字符\.来得到真实的字符
  \是用\\来表示的,所以用\\.来切割。
  3.c:\\abc\\a.txt  用\\\\来切割\\
  3.叠词的切割。组的概念(.)将这个位上规则的结果封装成一个组,每个组都有一个编号,通过\1加上编号
  来引用组的结果。"aadsabbsdddfghss" 用"(.)\\1+"来进行叠词切割
  ((()())())  根据左括号确定组的个数和组的编号。
 
 3.替换 String replaceAll(String regex, String replacement)
  底层用的是Mathcer 中的replaceAll( String replacement )
  1.将字符串中的数字替换成#。"12321312kasdaksdd82739821" str.replaceAll( "\\d{5,}", "#" )超过5个数字则将这些数字
  都替换成#
  2.erzzzzhhhhhhhkkks.将叠词换成一个词。在规则外用调用规则的结果 $1 $加上组的编号
  str.replace( "(.)\\1+", "$1" ); 如果$后面没写数字,则用默认的即为整个字符串。
 4.获取
  Matcher 中的find方法,根据Pattern中的正则表达式在关联字符串中寻找符合规则的子串,找到就返回真,不再继续寻找。
  如果没找到则继续寻找,直到找到。用Matcher中的group方法获得找到的子串
  此方法从匹配器区域的开头开始,如果该方法的前一次调用成功了并且从那时开始匹配器没有被重置,则从以前匹配操作没有匹配的第一个字符开始。
  find与matches一个是匹配一部分,一个是匹配整个字符串。
  m.start() m.end() 返回的是find前,匹配开始的位置和返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量,也就是不包含尾部。
  切割就是通过start和end来将不符合规则的部分切出来的
  ****注意:同一个Matcher用的是同一个指针。即在用matches方法时指针移到的位置和find的是共享的
 使用正则表达式:
  1.如果只想知道该字符串是对是错,则使用匹配。matches
  2.如果将已有的字符串换成另一个字符串,则使用替换
  3.如果想要按自己的方式将字符串变成多个字符串则用切割。切割是获取规则以外的字串
  4.想要拿到符合规则的子串,则用获取。
  切割和获取的区别:一个是拿到符合规则的子串,一个是拿到符合规则以外的子串
 ------- android培训、java培训、期待与您交流! ----------   详细请查看:http://edu.youkuaiyun.com/heima/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值