600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java 正则表达式 非贪婪模式_正则表达式的贪婪模式和非贪婪模式

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

时间:2022-11-27 01:45:30

相关推荐

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

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

定义

贪婪模式:正则表达式趋向于匹配最大长度。

非贪婪模式:正则表达式趋向于匹配最小长度,即一旦匹配到结果就结束。

如何区分?

默认是贪婪模式。

若 量词 后面添加 问号(?),则是非贪婪模式。量词 包括以下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 = pile(rule1);

Matcher m1 = p1.matcher(text);

while (m1.find()) {

System.out.println("匹配结果:" + m1.group(0));

}

System.out.println("非贪婪模式:" + rule2);

Pattern p2 = pile(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 = '

贪婪'

print("文本:", text)

print("贪婪模式:")

print(re.findall(r"<.>", text))

print("非贪婪模式:")

print(re.findall(r"<.>", text))

运行结果:

文本:

贪婪

贪婪模式:

['

']

非贪婪模式:

['

']

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。