美文网首页
正则表达式写得好,能够胜过算法

正则表达式写得好,能够胜过算法

作者: 鼾声鼾语 | 来源:发表于2020-04-29 14:19 被阅读0次

    正则表达式为:(?<=左侧的内容).*(?=右侧的内容)
    比如:字符串aaabbbcccdddeee,想要获取"ccc"
    正则表达式可以参考以下四种示例:

    (?<=aaabbb).*(?=dddeee)
    (?<=bbb).*(?=dddeee)
    (?<=aaabbb).*(?=ddd)
    (?<=bbb).*(?=ddd)
    如果要包括左右两侧的内容,则可以是:左侧的内容(.*?)右侧的内容
    比如上面的字符串要获取bbbcccddd,
    正则表达式是:bbb(.*?)ddd
    

    捕获两个字符之间的字符串信息,类似就是AcakeB这个字符串中提取cake。
    当时只想到如下的表达式:

    A.*B
    

    上述是将以A开头和以B结尾的字符串提取出来,但是本意是不想要有A和B了。通过查资料发现了如下写法

    (?<=A).*(?=B)
    

    继续查了一点资料,又学到一点知识。

    表达式    描述
    (?:pattern) 非捕获匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。
    (?=pattern) 非捕获匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,不进行存储供以后使用。
    (?!pattern) 非捕获匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,不进行存储供以后使用
    (?<=pattern) 非捕获匹配,反向肯定预查,与正向肯定预查类似,但是方向相反。
    (?<!pattern) 非捕获匹配,反向否定预查,与正向否定预查类似,但是方向相反。
    

    举例:

    String str1 = "5A2118DAF110220D0E0F10111213A5A55A2118DAF1102314FFFFFFFFFFFF44A55A2118DAF1101";
                // String[] strsplit = str1.split("A55A.*");
                String[] strsplit = str1.split("(?=A55A)");        
                for (int i = 0; i < strsplit.length; i++) {
                    System.out.println(strsplit[i]);   
                }
                
    

    答案:

    5A2118DAF110220D0E0F10111213A5
    A55A2118DAF1102314FFFFFFFFFFFF44
    A55A2118DAF1101
    

    相关文章

      网友评论

          本文标题:正则表达式写得好,能够胜过算法

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