java 正则表达式 第二节 字符类

[abc] a或者b或者c
[\^abc] 除了a、b、c以外的任意字符
[a-zA-Z] a-z和A-Z之间的字符
[a-d[m-p]] a到d或者m-p (并集)
[a-z&&[def]] d、e、f(交集)
[a-z&&[\^bc]] a到z,除了b、c以外(减法)
[a-z&&[\^m-p]] a到z,但不包括m到p(减法)

预定义字符类
. 任何字符(有可能匹配也可能不匹配行结束符号)
\d 一个数字 :[0-9]
\D 一个非数字 :[\^0-9]
\s 一个空格符 : [\t\n\x0B\f\r]
\S 一个非空格符 :[^\s]
\w 一个单词字符:[a-zA-z_0-9]
\W 一个非单词字符

量词

贪婪型勉强型占有型意义
X?X??X?+X出现一次或者不出现
X*X*?X*+X出现任意次
X+X+?X++X出现一次或者多次
X{n}X{n}?X{n}+x正好出现n次
X{n,}X{n,}?X{n,}+X至少出现n次
X{n,m}X{n,m}?X{n,m}+X至少出现n次,最多出现m次

贪婪性:因为他们试图在第一次匹配前强迫匹配器读入,或者吃入整个字符串。如果第一个匹配失败,匹配器后退一个字符,并重新尝试。一直重复这个步骤直到没有能再后退的字符。
勉强型:接受的是相反的方法,他们在输入字符串的开始处启动,然后每次勉强读入一个字符来寻找匹配。他们所做的是最后尝试读入整个输入字符串。
占有型量词:一直读入整个字符串,每次尝试(且只是一次)一个屁屁额。占有型从不后退,即使这样做会让全局匹配成功。

举例子:


        Pattern pattern=Pattern.compile(".*foo");
        Matcher matcher=pattern.matcher("xfooxxxfoo");

        while (matcher.find())
        {
            System.out.printf("%s%n",matcher.group());
        }

结果:
xfooxxxfoo

        Pattern pattern=Pattern.compile(".*?foo");
        Matcher matcher=pattern.matcher("xfooxxxfoo");

        while (matcher.find())
        {
            System.out.printf("%s%n",matcher.group());
        }

结果:
xfoo
xxxfoo

 Pattern pattern=Pattern.compile(".*+foo");
    Matcher matcher=pattern.matcher("xfooxxxfoo");
        while (matcher.find())
        {
            System.out.printf("%s%n",matcher.group());
        }

结果:空

边界匹配器:

贪婪型意义
^一行的开始
$一行的结束
\b一个单词的边界
\B一个非单词边界
\A输入的开始处
\G前匹配的结尾处
\Z除了最后的结束符号,(如果有)之外的输入的结尾处
\z输入的结尾处

例子:

 Pattern pattern=Pattern.compile("\\bdog\\b");
        Matcher matcher=pattern.matcher("the dog plays in the dogyard");

        while (matcher.find())
        {
            System.out.printf("%s%n%d %d",matcher.group(),matcher.start(),matcher.end());
        }

结果:
dog
4 7

Pattern pattern=Pattern.compile("\\bdog\\B");
        Matcher matcher=pattern.matcher("the dog plays in the dogyard");

        while (matcher.find())
        {
            System.out.printf("%s%n%d %d",matcher.group(),matcher.start(),matcher.end());
        }

结果:
dog
21 24

Pattern pattern=Pattern.compile("dog");
        Matcher matcher=pattern.matcher("the dog plays dog in the dogyard");

        while (matcher.find())
        {
            System.out.printf("%s%n%d %d",matcher.group(),matcher.start(),matcher.end());
        }

结果:
dog
4 7dog
14 17dog
25 28

Pattern pattern=Pattern.compile("\\Gdog");
        Matcher matcher=pattern.matcher("the dogdog plays dog in the dogyard");

        while (matcher.find())
        {
            System.out.printf("%s%n%d %d",matcher.group(),matcher.start(),matcher.end());
        }

结果:空

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝鲸123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值