项湫

导航

正则表达式

java正则表达式

正则表达式,又称规则表达式,计算机科学的一个概念。正则表达式通常被用来检索替换那些符合某个模式(规则)的文本。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):

2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

正则表达式语法

基本介绍

如果要想灵活的运用正则表达式,必须了解其中各种元字符的功能,元字符从功能上大致分为:

  1. 限定符
  2. 选择匹配符
  3. 分组组合和反向引用符
  4. 特殊字符
  5. 字符匹配符
  6. 定位符

 

元字符( Metacharacter)-转义号 \\

\\ 符号说明:在我们使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错的。案例:用去匹配“abc$("会怎样?

再次提示

Java的正则表达式中,两个\\代表其他语言中的一个\

需要用到转义符号的字符有以下: . * + () $ / \ ? [ ] ^ { }

 

· 元字符

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

java正则表达式是怎么用的?

(这里太过高深不做详解)

 

 

 

 

正则表达式为一个字符串,其中[]内的部分代表其中的任意字符。例如[abc]代表a或b或c。我们还可以用[a-z]这种形式代表某一字符区间。
有了正则表达式,我们能很简洁的去匹配、替换、切割字符串。

1)查找

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {

//要匹配的字符

String str = "131bcd6fgij";

//正则表达式

//这里代表第一个字符为1,第二个字符为2378,后面9个为小写字母或数字,且不为5或者h

String regex = "1[2378][1-46-9a-gi-z]{9}";

//直接写

boolean flag1 = str.matches("1[2378][1-46-9a-gi-z]{9}");

System.out.println(flag1);

//或者

boolean flag2 = Pattern.matches(regex, str);

System.out.println(flag2);

//再或者将给定的正则表达式编译为模式。

Pattern p = Pattern.compile(regex);

//创建一个匹配器,匹配给定的输入与此模式。

Matcher m = p.matcher(str);

//尝试将整个区域与模式进行匹配。

boolean flag3 = m.matches();

//输出匹配结果,此次结果为true

System.out.println(flag3);

}

}

2)替换

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {

//要匹配的字符

String str = "12a6B985Ccv65";

//正则表达式

String regex = "[a-zA-Z]+";

//正则表达式

String regex2 = "\\d+";

//将字符串中英文字母替换为&符号,输出12&6&985&&&65

 

System.out.println(str.replaceAll("[a-zA-Z]", "&"));

//将字符串中连续英文字母替换为&符号,输出12&6&985&65

System.out.println(str.replaceAll(regex, "&"));

 

//将字符串中单个数字替换为0,输出00a0B000Ccv00

System.out.println(str.replaceAll("\\d","0"));

//将字符串中单个数字或者连续的数字替换为0,输出0a0B0Ccv0

System.out.println(str.replaceAll(regex2,"0"));

 

}

}

(3)切割

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {

// 要切割的字符

String str = "2a6B5C65q9";

// 根据单个数字或者连续数字切割字符串

String []arr = str.split("\\d+");

System.out.println(arr.length);

for (String s : arr) {

System.out.println(s);

}

// 根据单个数字来切割字符串

arr = str.split("\\d");

System.out.println(arr.length);

for(String s : arr) {

System.out.println(s);

}

}

}

开头存在数字,导致最终分割结果在开头会多空的字符串。

 

 

posted on 2022-01-02 15:27  项湫  阅读(37)  评论(0编辑  收藏  举报