美文网首页
正则表达式的贪婪模式和非贪婪模式

正则表达式的贪婪模式和非贪婪模式

作者: 星光下的胖子 | 来源:发表于2021-01-25 13:55 被阅读0次

一、什么是贪婪模式和非贪婪模式?

定义
  • 贪婪模式:正则表达式趋向于匹配最大长度。
  • 非贪婪模式:正则表达式趋向于匹配最小长度,即一旦匹配到结果就结束。
如何区分?
  • 默认是贪婪模式。
  • 量词 后面添加 问号(?),则是非贪婪模式。量词 包括以下4种:
    • {m, n}:匹配 m 到 n 个,包含 m、n。
      • {N} --> 匹配N次
      • {M, N} --> 匹配M到N次
      • {M,} --> 匹配至少M次
      • {,N} --> 匹配至多N次
    • *:匹配任意多个,包括0个。
    • +:匹配1到多个。
    • ?:0或1个。
简单示例
String str = "abcaxc";
Pattern p1 = "ab.*c";  # 贪婪模式,匹配结果是:abcaxc
Pattern p2 = "ab.*?c";  # 量词*后面添加?,是非贪婪模式,匹配结果:abc

二、程序实例

1)Java 代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularExpression {
    public static void main(String[] args) {
        String text = "(content:\"rcpt to root\";pcre:\"word\";)";
        String rule1 = "content:\".+\""; //贪婪模式
        String rule2 = "content:\".+?\""; //非贪婪模式

        System.out.println("文本:" + text);

        System.out.println("贪婪模式:" + rule1);
        Pattern p1 = Pattern.compile(rule1);
        Matcher m1 = p1.matcher(text);
        while (m1.find()) {
            System.out.println("匹配结果:" + m1.group(0));
        }

        System.out.println("非贪婪模式:" + rule2);
        Pattern p2 = Pattern.compile(rule2);
        Matcher m2 = p2.matcher(text);
        while (m2.find()) {
            System.out.println("匹配结果:" + m2.group(0));
        }
    }
}

运行结果:

文本:(content:"rcpt to root";pcre:"word";)
贪婪模式:content:".+"
匹配结果:content:"rcpt to root";pcre:"word"
非贪婪模式:content:".+?"
匹配结果:content:"rcpt to root"
2)Python 代码
# 导入re模块
import re

text = '<table><td><th>贪婪</th><th>贪婪</th></td></table>贪婪'
print("文本:", text)
print("贪婪模式:")
print(re.findall(r"<.*>", text))
print("非贪婪模式:")
print(re.findall(r"<.*?>", text))

运行结果:

文本: <table><td><th>贪婪</th><th>贪婪</th></td></table>贪婪
贪婪模式:
['<table><td><th>贪婪</th><th>贪婪</th></td></table>']
非贪婪模式:
['<table>', '<td>', '<th>', '</th>', '<th>', '</th>', '</td>', '</table>']

相关文章

  • 正则表达式的贪婪模式和非贪婪模式

    一、什么是贪婪模式和非贪婪模式? 定义 贪婪模式:正则表达式趋向于匹配最大长度。 非贪婪模式:正则表达式趋向于匹配...

  • JavaScript 正则表达式( 匹配网页的图片地址)

    正则表达式 - 元字符 贪婪模式与非贪婪模式 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为;贪婪模式 在...

  • 正则表达式

    贪婪模式和非贪婪模式 正则表达式是贪婪匹配的。比如:'123456789'.replace(/\d{3,6}/g,...

  • 正则表达式

    1.什么是贪婪模式和非贪婪模式? 量词在默认下是尽可能多的匹配的,就是贪婪模式;非贪婪模式,让正则表达式尽可能少的...

  • 正则表达式

    1.什么是贪婪模式和非贪婪模式? 贪婪模式 一般情况下,正则表达式在匹配过程中会尽可能多的匹配 非贪婪模式 让正则...

  • 爬虫的提取(2)--re正则

    python正则表达式基本元字符 贪婪模式在python中默认采用的是贪婪模式,使用非贪婪模式的话,只需要在量词后...

  • 正则表达式贪婪模式与非贪婪模式

    什么是正则表达式的贪婪模式和非贪婪模式? 我们先从例子入手: 原本想要匹配的字符为"witch"和"broom"两...

  • 贪婪模式和非贪婪模式

    贪婪模式先看那个例子 得到的是[""witch" and her "brom""],而并不是我们之前想到的"wit...

  • 第23章 正则表达式作业

    第1题:什么是贪婪模式和非贪婪模式? 什么是贪婪模式和非贪婪模式? 比如{3,5}这个量词,要是在句子中出现了十次...

  • javascript正则表达式

    什么是贪婪模式和非贪婪模式? 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功...

网友评论

      本文标题:正则表达式的贪婪模式和非贪婪模式

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