zoukankan      html  css  js  c++  java
  • re 正则匹配的非贪婪匹配

    非贪婪匹配

    将尽可能少的匹配内容,当?出现在其他的重复次数后面时会将贪婪模式改为非贪婪模式。

    ?

    abc.*?

    abc.+?


    非贪婪匹配:尽可能少的匹配
    {n,}?
    {,n}?
    {n,m}?
    *? # *号表示 *号前面的字符出现0--无数个 ?号表示最少匹配
    +?   # +号表示 +号前面的字符出现1--无数个
    ?? # ??表示0--1个

    print(re.findall(r'ab{0,}', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
    print(re.findall(r'ab{0,}?', 'aababbabbb')) # ['a', 'a', 'a', 'a']

    print(re.findall(r'ab{,3}', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
    print(re.findall(r'ab{,3}?', 'aababbabbb')) # ['a', 'a', 'a', 'a']

    print(re.findall(r'ab{1,3}', 'aababbabbb')) # ['ab', 'abb', 'abbb']
    print(re.findall(r'ab{1,3}?', 'aababbabbb')) # ['ab', 'ab', 'ab']

    print(re.findall(r'ab*', 'aababbabbb')) # ['a', 'ab', 'abb', 'abbb']
    print(re.findall(r'ab*?', 'aababbabbb')) # ['a', 'a', 'a', 'a']

    print(re.findall(r'ab+', 'aababbabbb')) # ['ab', 'abb', 'abbb']
    print(re.findall(r'ab+?', 'aababbabbb')) # ['ab', 'ab', 'ab']

    print(re.findall(r'ab?', 'aababbabbb')) # ['a', 'ab', 'ab', 'ab']
    print(re.findall(r'ab??', 'aababbabbb')) # ['a', 'a', 'a', 'a']


    print(re.findall(r'', '')) # ['']
    print(re.findall(r'a{0}', 'a')) # ['', '']

    # 非贪婪匹配结合单个匹配结果是没有任何意义的
    print(re.findall(r'b*?', 'bbbbbbbb'))
    print(re.findall(r'(?:ab)*?', 'bbbbbbbb'))

    # 非贪婪匹配的应用场景,正则一定会有首尾标识,中间匹配的结果会有非贪婪匹配的语法
    s = '<a>abc</a><a></a>'
    print(re.findall(r'<.*>', s)) # ['<a>abc</a><a></a>']
    print(re.findall(r'<.*?>', s)) # ['<a>', '</a>', '<a>', '</a>']

    print(re.findall(r'<a>(.*)</a>', s)) # ['abc</a><a>']
    print(re.findall(r'<a>(.*?)</a>', s)) # ['abc', '']
  • 相关阅读:
    ThinkPHP(3.2)搭建简单留言板项目
    phpmailer 发送邮件
    smtp协议
    反向Ajax原理和模型(燕十八php笔记)
    全部选中复选框
    Ajax大文件切割上传
    ajax上传文件带进度条的思路
    ajax返回值
    Sublime 中文乱码问题
    AndroidStudio 问题点
  • 原文地址:https://www.cnblogs.com/liguodeboke/p/10846845.html
Copyright © 2011-2022 走看看