正则表达式(附demo)

正则表达式

1.基本操作

连接操作:

写出 A,表示匹配A,写出B,表示匹配AB;

public static void main(String[] args) {
  String s = "AB";
  boolean isMatches = Pattern.matches("AB",s);
  System.out.println(isMatches);
}
运行结果true

或操作:

写出 A|B ,会匹配 A或者B,写出 AB|BC|CD,会匹配AB,BC,或者CD

public static void main(String[] args) {
  String s = "CD";
  boolean isMatches = Pattern.matches("AB|BC|CD",s);
  System.out.println(isMatches);
}
运行结果:true

闭包操作

将*标注在要重复的模式之后,即可将模式部分重复任意的次数

public static void main(String[] args) {
  String s = "AAAAAAAAB";
  boolean isMatches = Pattern.matches("A*B",s);
  System.out.println(isMatches);
}
这个demo将A重复任意次,匹配前面有任意个A,以B结尾的字符串
运行结果:true

括号

使用括号可以改变默认的优先级顺序

public static void main(String[] args) {
  String s = "MAMAMAMAMAMAMAMAMAB";
  boolean isMatches = Pattern.matches("(MA)*B",s);
  System.out.println(isMatches);
}
匹配前面有任意个MA,最后以B结尾的字符串

demo练习:匹配ABMAMA和BAMAMA这俩个字符串

答案:

public static void main(String[] args) {
  String s = "BAMAMA";//ABMAMA
  boolean isMatches = Pattern.matches("(AB|BA)(MA)*",s);
  System.out.println(isMatches);
}
运行结果true
2.字符集操作

这里先把操作列出来,然后再使用demo演示

  1. 使用.来匹配任意字符
  2. 使用[]来指定一个集合,比如 [AFGHS] 就是匹配集合中任意一个字符
  3. 使用包含在[]中的-来指定范围,如[A-Z]是匹配A-Z中任意一个字符
  4. 使用包含在[]中的^来取补集,如[ ^ABC]来除ABC外任意一个字符

demo

public static void main(String[] args) {
       //使用.来匹配任意的字符
       String s1 = "ABC";
       System.out.println(
               Pattern.matches("A.C",s1)
       );
       //使用[]来表示集合
       String s2 = "ABXZW";
       System.out.println(
               Pattern.matches("[BAZWX]*",s2)
       );
       //使用-来表示范围,如匹配大写小写数字这种模式
       String s3 = "Bc5Hg1";
       System.out.println(
               Pattern.matches("([A-Z][a-z][0-9])*",s3)
       );
       //使用^来进行取反集合
       String s4 = "ASD";
       System.out.println(
               Pattern.matches("[^ASD]*",s4)
       );
   }
3闭包的其他写法

前面的闭包运算符表示将它的操作数重复任意次,在实际使用中,我们希望能够灵活指定重复的次数

+运算符表示至少重复一次

?表示重复0次或一次

使用{}可以指定重复次数或范围

demo

   public static void main(String[] args) {
       //+表示最少重复一次
       String s1 = "AB";//空串情况为false
       System.out.println(
               Pattern.matches("(AB)+",s1)
       );
       //使用?来表示重复0次或一次
       String s2 = "ABAB";//AB 或者 空串时为true,ABAB为false
       System.out.println(
               Pattern.matches("(AB)?",s2)
       );
       //使用{}来指定模式的次数
       String s3 = "ABABAB";
       System.out.println(
               Pattern.matches("(AB){3}",s3)
       );
       //使用{}来指定重复次数的范围
//        String s4 = "ABABAB";
//        System.out.println(
//                Pattern.matches("(AB){1-5}",s4)
//        );

   }
最后那个可能是字符串转义问题吧~-
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以参考下面的代码进行java字符串按正则表达式解析:String str = "This is a demo string"; Pattern p = Pattern.compile("\\w+"); Matcher m = p.matcher(str); while (m.find()) { System.out.println(m.group()); } ### 回答2: 在Java中,可以使用正则表达式解析字符串。解析字符串的过程包括查找、提取和替换符合特定模式的文本。 首先,我们需要使用java.util.regex包中的类来处理正则表达式。主要使用的类是Pattern和Matcher。 Pattern类是正则表达式的编译表示。通过使用Pattern.compile()方法,我们可以将正则表达式编译为一个Pattern对象。Matcher类则是Pattern对象的匹配器。我们可以使用Pattern.matcher()方法来创建一个Matcher对象,然后使用Matcher的一系列方法进行匹配。 例如,假设我们想要从一个字符串中提取所有的邮箱地址。我们可以使用正则表达式来定义邮箱地址的模式。可以使用以下代码实现: String text = "我的邮箱地址是:tom@example.com, 你可以给我发邮件。"; String pattern = "\\w+@\\w+\\.\\w+"; Pattern compiledPattern = Pattern.compile(pattern); Matcher matcher = compiledPattern.matcher(text); while (matcher.find()) { String email = matcher.group(); System.out.println(email); } 运行上述代码,结果将输出:tom@example.com 在这个例子中,首先编译了一个模式为"\\w+@\\w+\\.\\w+"的正则表达式。该模式用于匹配以字母、数字或下划线开头,后面跟着@符号,再后面是一个或多个字母、数字或下划线,最后是一个点和一个或多个字母、数字或下划线的字符串。 然后,我们使用Matcher的find()方法在文本中查找该模式的匹配项。当找到匹配项时,我们可以使用Matcher的group()方法获取匹配项的字符串表示,并进行后续处理。 总结来说,Java字符串按正则表达式解析可以通过Pattern和Matcher类来实现。通过定义和编译正则表达式,然后使用Matcher的方法进行匹配和处理,我们可以提取和操作字符串中符合特定模式的文本。 ### 回答3: Java中可以使用正则表达式解析字符串,实现字符串的拆分、匹配和替换等功能。下面是一个简单的示例: import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexDemo { public static void main(String[] args) { String input = "Hello, 2021! Welcome to Java Regular Expression!"; String pattern = "[0-9]+"; // 创建 Pattern 对象 Pattern p = Pattern.compile(pattern); // 创建 Matcher 对象 Matcher m = p.matcher(input); // 查找字符串中匹配正则表达式的部分 while (m.find()) { // 打印匹配到的部分 System.out.println("匹配到的字符串为:" + m.group()); } // 替换字符串中的匹配部分 String replaced = m.replaceAll("*"); System.out.println("替换后的字符串为:" + replaced); } } 上述代码中,我们使用了正则表达式"[0-9]+",表示匹配一个或多个数字。然后我们将该正则表达式编译成Pattern对象,并利用Matcher对象对输入字符串进行匹配。 通过循环调用Matcher的find()方法,可以查找字符串中所有匹配正则表达式的部分。每次调用find()方法后,可以通过调用group()方法获取匹配到的字符串,并进行相应的处理。 代码的最后,我们还使用了Matcher的replaceAll()方法,将匹配到的部分替换为"*",并打印出替换后的字符串。 通过使用正则表达式,我们可以方便地对字符串进行拆分、匹配和替换等操作,实现更复杂的字符串处理功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值