美文网首页
Java的正则表达式

Java的正则表达式

作者: bangbang2 | 来源:发表于2020-07-12 20:46 被阅读0次

其实任何一个字符串就是一个简单的正则表达式
如下图是一些常见的匹配实例
\:斜线代表要开始匹配,后接要匹配的东西
例如:\s,s是英文space的首字母,代表要匹配的是空格,需要注意的空格可以是很多个:1-n个
^代表表达式要开始
()?代表括号里的东西是可选的
\d代表是匹配数字:1-n,直接看字母是哪个单词的首字母


image.png

正则表达式在Java中主要有以下几种:
1:Pattern类,具体使用,看代码吧
简单说:直接调用Pattern.matches(pattern,content),第一个参数为要匹配的正则表达式,返回值是一个布尔类型的值

import java.util.regex.*; 
class RegexExample1{
   public static void main(String args[]){
      String content = "I am noob " +
        "from runoob.com.";
 
      String pattern = ".*runoob.*";
 
      boolean isMatch = Pattern.matches(pattern, content);
      System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch);
   }
}

常见的一些匹配(到目前为止,我看懂的,嘻嘻)


image.png

\b代表匹配的字符必须在单词的最后
\B和上一个正好相反


image.png
image.png
image.png

发现匹配中的大写符号和小写符号正好是相反的
大写或小写以及数字都能匹配


image.png
2:Matcher
一些常见的方法
image.png
image.png
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class RegexMatches
{
    private static final String REGEX = "\\bcat\\b";
    private static final String INPUT =
                                    "cat cat cat cattie cat";
 
    public static void main( String args[] ){
       Pattern p = Pattern.compile(REGEX);
       Matcher m = p.matcher(INPUT); // 获取 matcher 对象
       int count = 0;
 
       while(m.find()) {
         count++;
         System.out.println("Match number "+count);
         System.out.println("start(): "+m.start());
         System.out.println("end(): "+m.end());
      }
   }
}

看结果


image.png

start得到闭合左边界,而end得到的是开放右边界
3:PatternSyntaxException
首先Pattern r = Pattern.compile(pattern);来创建一个Pattern,然后利用Matcher m = r.matcher(line);来创建Matcher对象,m.group会得到根据pattern的括号的表达式确定的字符串,从左往右开始匹配,group(0)为整个字符串,直接看代码吧

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class RegexMatches
{
    public static void main( String args[] ){
 
      // 按指定模式在字符串查找
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(\\D*)(\\d+)(.*)";
 
      // 创建 Pattern 对象
      Pattern r = Pattern.compile(pattern);
 
      // 现在创建 matcher 对象
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
         System.out.println("Found value: " + m.group(3) ); 
      } else {
         System.out.println("NO MATCH");
      }
   }
}

结果:


image.png
image.png

之前的字符串匹配和替换的题,也可以用正则表达式来解决
其中(.)\1+是什么意思呢?
.代表一个字符,(.)\1代表选择之前的这个字符(就是括号的字符乘以2,是double),多一个+,代表至少要3个这样相同的字符,


image.png
$1代表用第一个()的字符来替换左边的字符串,和\1中的数字一样都是代表第几个括号的字符,这种表达式写法简单,但是不好想
image.png
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int line = scanner.nextInt();
        scanner.nextLine();
        for (int i = 0; i < line; i++) {
            System.out.println(scanner.nextLine().replaceAll("(.)\\1+","$1$1").replaceAll("(.)\\1(.)\\2","$1$1$2"));
        }
    }
}

相关文章

网友评论

      本文标题:Java的正则表达式

      本文链接:https://www.haomeiwen.com/subject/okdncktx.html