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

简介: 之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意。 1.什么是正则表达式的贪婪与非贪婪匹配   如:String str="abcaxc";     Patter p="ab*c";   贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。

之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意。

1.什么是正则表达式的贪婪与非贪婪匹配

  如:String str="abcaxc";

    Patter p="ab*c";

  贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。

  非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。

2.编程中如何区分两种模式

  默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。

  量词:{m,n}:m到n个

     *:任意多个

     +:一个到多个

     ?:0或一个

3.程序实例

使用Snort的规则一条规则的一部分作为匹配文本,匹配出其中的content部分。

 1 import java.util.regex.Matcher;
 2 import java.util.regex.Pattern;
 3 
 4 public class RegularTest {
 5     
 6     public static void main(String[] arg){
 7         String text="(content:\"rcpt to root\";pcre:\"word\";)";
 8         String rule1="content:\".+\"";    //贪婪模式
 9         String rule2="content:\".+?\"";    //非贪婪模式
10         
11         System.out.println("文本:"+text);
12         System.out.println("贪婪模式:"+rule1);
13         Pattern p1 =Pattern.compile(rule1);
14         Matcher m1 = p1.matcher(text);
15         while(m1.find()){
16             System.out.println("匹配结果:"+m1.group(0));
17         }
18         
19         System.out.println("非贪婪模式:"+rule2);
20         Pattern p2 =Pattern.compile(rule2);
21         Matcher m2 = p2.matcher(text);
22         while(m2.find()){
23             System.out.println("匹配结果:"+m2.group(0));
24         }
25     }
26 }

执行结果:

 4.注意

  在linux C 下面没有编译成功使用?号的非贪婪模式。

   网上的一句话:the ? only works for Perl-based regexp, not for POSIX...

相关文章
|
4月前
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
61 0
|
PHP 开发者
你见过这些正则表达式中奇奇怪怪的匹配模式吗 _ 贪婪匹配、懒惰匹配 、禁止贪婪匹配!
一篇文章让你清楚的了解正则表达式中奇奇怪怪的匹配模式-- 贪婪匹配、懒惰匹配 、禁止贪婪匹配!
86 1
你见过这些正则表达式中奇奇怪怪的匹配模式吗 _ 贪婪匹配、懒惰匹配 、禁止贪婪匹配!
|
7月前
|
JavaScript 前端开发 索引
JavaScript中的正则表达式:使用与模式匹配
【4月更文挑战第22天】本文介绍了JavaScript中的正则表达式及其模式匹配,包括字面量和构造函数定义方式,以及`test()`、`match()`、`search()`和`replace()`等匹配方法。正则表达式由元字符(如`.`、`*`、`[]`)和标志(如`g`、`i`)组成,用于定义搜索模式。文中还分享了正则使用的技巧,如模式分解、非捕获分组和注释。掌握正则表达式能提升文本处理的效率和代码质量。
|
7月前
|
数据可视化 容器
解锁正则表达式的秘密:regex-vis工具带你看见模式匹配的魔法!
解锁正则表达式的秘密:regex-vis工具带你看见模式匹配的魔法!
149 2
|
7月前
|
机器学习/深度学习 Java 索引
39、一篇文章弄懂 Java 正则表达式中的量词、贪婪、勉强、独占和 String 的 matches 方法的底层【个人感觉非常值得学习】
39、一篇文章弄懂 Java 正则表达式中的量词、贪婪、勉强、独占和 String 的 matches 方法的底层【个人感觉非常值得学习】
69 0
|
7月前
|
存储 Shell 程序员
Python 自动化指南(繁琐工作自动化)第二版:七、使用正则表达式的模式匹配
Python 自动化指南(繁琐工作自动化)第二版:七、使用正则表达式的模式匹配
103 0
|
7月前
|
数据采集 Java API
Java 正则表达式【非贪婪匹配、格式验证、反向引用、API】
Java 正则表达式【非贪婪匹配、格式验证、反向引用、API】
|
开发者 Perl
正则表达式中的模式修正符S和M 妙用!
教你如何正确使用正则表达式中的模式修正符S和M!
68 0
正则表达式中的模式修正符S和M 妙用!
|
Python
138 python高级 - 正则表达式(贪婪和非贪婪)
138 python高级 - 正则表达式(贪婪和非贪婪)
53 0
|
6月前
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
57 2