正则表达式匹配,替换,查找,切割的方法

正则表达式的查找;主要是用到String类中的split():

String str;

str.split();方法中传入按照什么规则截取,返回一个String数组

常见的截取规则:

str.split("\\.")按照.来截取

str.split(" ")按照空格截取

str.split("cc+")按照c字符来截取,2个c或以上

str.split((1)\\.+)按照字符串中含有2个字符或以上的地方截取(1)表示分组为1

截取的例子:

按照分组截取;截取的位置在两个或两个以上的地方

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String str =  "publicstaticccvoidddmain" ;
    //对表达式进分组重用
    String ragex1= "(.)\\1+" ;
    String[] ss = str.split(ragex1);
    for (String st:ss){
    System.out.println(st);
    }
//按照两个cc+来截取
String ragex =  " " ;
   //切割
    String strs =  "publicstaticccvoidddmain" ;
   String ragexs =  "cc+" ;
   String[] s = strs.split(ragexs);
   for (String SSSS :s){
   System.out.println(SSSS);
   }
   System.out.println( "=-=========" );

正则表达式中的替换:

语法定义规则:

?
1
String s =str.replaceAll(ragex, newstr);

字符串中的替换是replace();

将4个或4个以上的连续的数字替换成*

?
1
2
3
4
5
6
// 替换
    String str= "wei232123jin234" ;
    String ragex =  "\\d{4,}" ;
    String newstr =  "*" ;
    String s =str.replaceAll(ragex, newstr);
    System.out.println(s);

将重复的字符串换成一个*

?
1
2
3
4
5
String str = "wwweiei222222jjjiiinnn1232" ;
    String ragex = "(.)\\1+" ;
    String newStr = "*" ;
    String s = str.replaceAll(ragex, newStr);
    System.out.println(s);

将 我...我...要..要.吃...吃...饭 换成 我要吃饭

?
1
2
3
4
5
6
7
8
9
10
11
12
String str =  "我...我...要..要.吃...吃...饭" ;
   String regex =  "\\.+" ;
   String newStr =  "" ;
   str=test(str, regex, newStr);
   regex =  "(.)\\1+" ;
   newStr =  "$1" ;
   test(str, regex, newStr);
public  static  String test(String str, String regex, String newStr) {
   String str2 = str.replaceAll(regex, newStr);
   System.out.println(str2);
   return  str2;
  }

正则表达式的字符串的获取:

1,根据定义的正则表达式创建Pattern对象

2,使用Pattern对象类匹配

3,判断是否为true

4,加入到组

例子;

?
1
2
3
4
5
6
7
8
9
String str =  "public static void main(String[] args)"
     " public static void main(String[] args)public static void main(String[] args)" ;
  String ragex =  "\\b[a-zA-Z]{4,5}\\b" ;
  Pattern p =Pattern.compile(ragex);
  Matcher m = p.matcher(str);
     while (m.find()){
     String s = m.group();
     System.out.println(s);
     }

作业:

1,获取<html>user</user>中的user

?
1
2
3
4
5
String str = "<html>user</html>" ;
String regex =  "<html>|</html>" ;
  String newStr =  "" ;
String str2 = str.replaceAll(regex, newStr);
System.out.println(str2);

2,获取dhfjksaduirfn 11@qq.com dsjhkfa wang@163.com wokaz中的邮箱号码

?
1
2
3
4
5
6
7
8
9
10
11
String regex =  " " ;
String[] strs=str.split(regex);
  for (String str2:strs){
  String ragexDemo =  "[a-zA-Z0-9]([a-zA-Z0-9]*[-_]?[a-zA-Z0-9]+)*"
  "@([a-zA-Z0-9]+)\\.[a-zA-Z]+\\.?[a-zA-Z]{0,2}" ;
Pattern p = Pattern.compile(ragexDemo);
Matcher m = p.matcher(str2);
while (m.find()){
System.out.println(m.group());
   }
  }

示例代码:

?
import  java.util.ArrayList;
import  java.util.regex.Matcher;
import  java.util.regex.Pattern;
 
public  class  test {
   public  static  void  main(String[] args) {
     getStrings();  //用正则表达式获取指定字符串内容中的指定内容
     System.out.println( "********************" );
     replace();  //用正则表达式替换字符串内容
     System.out.println( "********************" );
     strSplit();  //使用正则表达式切割字符串
     System.out.println( "********************" );
     strMatch();  //字符串匹配
   }
 
   private  static  void  strMatch() {
     String phone =  "13539770000" ;
     //检查phone是否是合格的手机号(标准:1开头,第二位为3,5,8,后9位为任意数字)
     System.out.println(phone +  ":"  + phone.matches( "1[358][0-9]{9,9}" ));  //true 
     
     String str =  "abcd12345efghijklmn" ;
     //检查str中间是否包含12345
     System.out.println(str +  ":"  + str.matches( "\\w+12345\\w+" ));  //true
     System.out.println(str +  ":"  + str.matches( "\\w+123456\\w+" ));  //false
   }
 
   private  static  void  strSplit() {
     String str =  "asfasf.sdfsaf.sdfsdfas.asdfasfdasfd.wrqwrwqer.asfsafasf.safgfdgdsg" ;
     String[] strs = str.split( "\\." );
     for  (String s : strs){
       System.out.println(s);
     }   
   }
 
   private  static  void  getStrings() {
     String str =  "rrwerqq84461376qqasfdasdfrrwerqq84461377qqasfdasdaa654645aafrrwerqq84461378qqasfdaa654646aaasdfrrwerqq84461379qqasfdasdfrrwerqq84461376qqasfdasdf" ;
     Pattern p = Pattern.compile( "qq(.*?)qq" );
     Matcher m = p.matcher(str);
     ArrayList<String> strs =  new  ArrayList<String>();
     while  (m.find()) {
       strs.add(m.group( 1 ));     
     }
     for  (String s : strs){
       System.out.println(s);
     }   
   }
 
   private  static  void  replace() {
     String str =  "asfas5fsaf5s4fs6af.sdaf.asf.wqre.qwr.fdsf.asf.asf.asf" ;
     //将字符串中的.替换成_,因为.是特殊字符,所以要用\.表达,又因为\是特殊字符,所以要用\\.来表达.
     str = str.replaceAll( "\\." "_" );
     System.out.println(str);   
   }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值