正则表达式

正则表达式(Reglar Expression):

  1. 基本语法:

普通字符:字母、数字、汉字、下划线以及没有特殊定义的标点符号都是”普通字符”。
表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。

  1. 高级语法:
    大小写是取反的意思。

\d : 0-9之间任意的一个数字。
\D :0-9之间任意的一个非数字。
\w :任意一个字母数字下划线。
\W :任意一个除了字母数字下划线。
\s :匹配空白符。(空格、制表符、换行符)
\S :匹配非空白符。
. :匹配任意一个字符(除了换行符)。
[\s\S] :匹配所有字符。

  • 自定义字符集合:

    [a57%]  :匹配"a"或"5"或"7"或"%"的其中一个。
    [^abc]  :匹配"a""b""c"之外的任意一个字符。
    [f-k] :匹配"f"-"k"之间的字符。
    [^2-8a-n]:匹配"a"-"n",2-8之外的任意字符。
    正则表达式的特殊符号,被包含到[]中,则失去特殊意义,除了 ^  - 之外。
    标准字符集合除了  .  外如果包含于[]中,自定义字符集合将包含该集合。
    
  • 量词:

    {n}:修饰前一个表达式重复n次。
    {m,n}:最少m次,最多n次。
    {m,}:至少m次。
    贪婪模式:量词默认的是匹配最多数。
    勉强模式:要想匹配最少数就停止,在{}后加上?即可。
    ?:这里与紧跟在{}后的?不同。它相当于{0,1}的意思。
    +  :表达式至少出现1次,相当于{1,}。
    *  :表达式不出现或者出现任意次,相当于{0,}。
    
  • 字符边界:

    ^  :只匹配字符串开始的字符位置。
    $  :只匹配字符串结束的字符位置。
    \b :前面的字符和后面的字符不全是\w的字符位置。
    匹配模式:
        IGNORECASE:匹配字符时忽略大小写。
    SIGLELINE:单行模式,整个文本作为一行。
    MULTILINE:多行模式,一行作为一个文本。
    在多行模式下若要匹配开头字符,在字符前加上\A即可。
    在多行模式下若要匹配结束字符,在字符后加上\Z即可。
    
  • 选择符和分组:

    |:匹配左边或者右边。
    ():捕获组。在组中匹配到的字符再次重复一次。
        例如:goto  gogo   toto  togo
        想要获得gogo    toto的话
        应该这样写:([a-z]{2})\1
        [a-z]{2}会匹配以上所有,
        一个括号为一组,从1开始。那么[a-z]{2}整体为第一组。
        第一次匹配到的go会存起来。后面的\1表示第一组再次重复。
        即只能匹配到go后面还是go的。
        同样。第二次匹配到的to是一样的。
        分组规则:
        (([1-9]{3})([a-z]))([^s-d])
        ([1-9]{3})([a-z])为第一组。\1
        ([1-9]{3})为第二组。\2
        ([a-z])为第三组。\3
        ([^s-d])为第四组。\4
    (?:):非捕获组。
        捕获组会把第一次匹配到的字符存在内存里,
        只要求()作为组织结构的作用时,可以使用。
        但是肯定就不能起到捕获组的作用了。
    
  • 预搜索(零宽断言、环视):

        (?=表达式):只能匹配到以表达式结尾的前面的字符。
        (?!表达式):只能匹配到不以表达式结尾的前面的字符。
        (?<=表达式):只能匹配到以表达式开头的后面的字符。
        (?<!表达式):只能匹配到不以表达式开头的后面的字符。
        本身断言匹配到的是不会计入字符的,只会匹配到断言匹配到的前面的字符。
    

Java复杂文本操作:

Java相关的正则表达式位于java.util.regex包下
Pattern类:正则表达式对象。
Matcher类:匹配对象。matches():将整个字符串与正则匹配。
find():扫描输入的序列查找与该模式匹配的下一个子序列。
group():将find的方法匹配的字符串返回。
replace():将正则对象的匹配规则所指定的字符替换为方法指定的字符。
split():分隔操作。

public class RegexTest {
    public static void main(String[] args) {
        //在asd131656498匹配整个字符串。\w+
        //表达式对象
        Pattern p=Pattern.compile("\\w+");
        //创建匹配对象
        Matcher m=p.matcher("asd1514&&654561");
        boolean matches = m.matches();
        //调用匹配引擎匹配
        System.out.println(matches);
    }
}

关于正则内容过一遍大致有印象即可。等到需要时再细细研究。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值