正则表达式-Java

正则表达式

正则表达式是处理文本的利器。
在做题的时候,用来处理字符串很省事。
总之,很有用。



正则表达式就是用某种模式去匹配字符串的一个公式。


一、使用正则表达式

先放一段代码:

/**
 * 反向引用
 * 找形如1221,2332这样的字符串
 */
public class fxyinyong {
    public static void main(String[] args) {
        String str = "3113456789";
        String regStr = "(\\d)(\\d)\\2\\1";

        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(str);

        while (matcher.find()){
            System.out.println("找到符合规则的字符串:"+matcher.group(0));  //这里输出:3113
            System.out.println("找到第一组:"+matcher.group(1));//这里输出:3
            System.out.println("找到第二组:"+matcher.group(2));//这里输出:1
        }
    }
}

在正则表达式中Pattern类和Matcher类很重要,经常使用。
java.util.regex.Pattern类中的常用方法:

  • static Pattern compile(String regex) 将给定的正则表达式编译为模式。
  • static Pattern compile(String regex, int flags) 将给定的正则表达式编译为带有给定标志的模式。flags参数是一个位掩码,可能包括 CASE_INSENSITIVE , MULTILINE , DOTALL , UNICODE_CASE , CANON_EQ , UNIX_LINES , LITERAL , UNICODE_CHARACTER_CLASS和 COMMENTS标志中的其中一个。
  • Matcher matcher(CharSequence input) 创建一个匹配器,匹配给定的输入与此模式。
  • String[] split(CharSequence input) 将给定的输入序列分成这个模式的匹配。
  • String[] split(CharSequence input, int limit) 将给定的输入序列分成这个模式的匹配。limit参数表示所产生的字符串的最大数量。

java.util.regex.Matcher类中的常用方法:

  • boolean matches() 尝试将整个区域与模式进行匹配。
  • boolean find() 尝试查找下一个匹配,找到了就返回true。
  • boolean find(int start) 尝试查找下一个匹配,找到了就返回true。
  • int start() 返回上一个匹配的起始索引。
  • int end() 返回上一个匹配的结束索引。
  • boolean lookingAt() 将输入序列从区域开头开始与模式匹配,如果匹配上了就返回true。
  • String group() 返回当前的匹配。
  • String group(int groupIndex) 返回匹配给定群组的字符串。该群组由从1开始的索引指定的,或者用0表示整个匹配。
  • String group(String name) 返回匹配给定群组的字符串。用表示具名群组的字符串来指定。
  • String replaceAll(String replacement) 返回从匹配器输入获得将所有匹配用替换字符串替换之后的字符串。

除了这两个常用的类之外,还有java.util.regex.PatternSyntaxException类,抛出未经检查的异常,用于指示正则表达式模式中的语法错误;我们常用的java.util.Scanner类中可以使用正则表达式解析原始类型和字符串。

二、正则表达式的语法(常用)

我觉得这篇文章写的挺好:https://blog.youkuaiyun.com/weixin_40608613/article/details/102786878
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

  • 在正则表达式中需要使用转义符号的字符有:. * + - ( ) $ / \ ? [ ] ^ { }
    比如查找字符串中的 . 符号,则需要对 . 进行转义,即在其前加一个 \ 。例如: reg\.ex 匹配 reg.ex
    但是当这些符号写在[]里面的时候就不需要使用转义符了。

  • Java语言是区分大小写的,如果想要使正则表达式中的大小写不敏感,有两种方法:
    (1)使用Pattern.CASE_INSENSITIVE标志,用法:Pattern pattern = Pattern.compile(regStr,Pattern.CASE_INSENSITIVE);表示对所有匹配条件的字符串中的字符大小写不敏感。
    (2)使用(?i) ,用法:String regStr = "(?i)abcd";表示对abcd的大小写不敏感;String regStr = "((?i)ab)cd";表示对ab的大小写不敏感。

  • Java中的匹配模式默认为贪婪匹配,即尽可能的匹配多的。如果想要尽可能匹配少的,可以使用,用法:

String str = "fguiabchfjgk";

String regStr1 = "abc.*";    //匹配到abchfjgk
String regStr1 = "abc.*?";   //匹配到abc
表达式描述
*?重复0次
+?重复1次
??重复0次
{n,m}?重复n次
{n,}?重复n次

就先这样吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值