正则表达式-问号的四种用法

原文符号

因为?在正则表达式中有特殊的含义,所以如果想匹配?本身,则需要转义,\?

有无量词

问号可以表示重复前面内容的0次或一次,也就是要么不出现,要么出现一次。

非贪婪匹配

贪婪匹配

在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

string pattern1 = @"a.*c";   // greedy match 
Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abcabc"

非贪婪匹配

在满足匹配时,匹配尽可能短的字符串,使用?来表示非贪婪匹配

string pattern1 = @"a.*?c";   // non-greedy match
Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abc"

几个常用的非贪婪匹配Pattern

  • *? 重复任意次,但尽可能少重复
  • +? 重复1次或更多次,但尽可能少重复
  • ?? 重复0次或1次,但尽可能少重复
  • {n,m}? 重复n到m次,但尽可能少重复
  • {n,}? 重复n次以上,但尽可能少重复

不捕捉模式

如何关闭圆括号的捕获能力?而只是用它来做分组,方法是在左括号的后边加上:?,这里第一个圆括弧只是用来分组,而不会占用捕获变量,所以$1的内容只能是steak或者burger,而永远不可能是bronto。
while(<>){
    if(/(?:bronto)(steak|burger)/){
        print "Fred wants a $1\n" ;
    }
}

时间: 2024-08-14 21:24:10

正则表达式-问号的四种用法的相关文章

mysql中模糊查询的四种用法介绍

下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来. 另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件 SELECT * FROM [user] WHERE u_name LIKE

mysql进阶 六 模糊查询的四种用法介绍

mysql中模糊查询的四种用法介绍 这篇文章主要介绍了mysql中模糊查询的四种用法,需要的朋友可以参考下. 下面介绍mysql中模糊查询的四种用法: 1%: 表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为“张三”,“张猫三”.“三脚猫”,“唐三藏”等等有“三”的记录全找出来. 另外,如果需要找出u_name中既有“三”又有

[java]static关键字的四种用法

在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下static关键字及其用法. static关键字 1.修饰成员变量 在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句话挺起来都点奇怪,其实这是相对于对象的属性和方法来说的.请看下面的例子:(未避

c++中for的四种用法。

#include <algorithm> #include <vector> #include <iostream> using namespace std; int main() { int nArray[] = {0, 1, 2, 3, 4, 5}; std::vector<int> vec(nArray, nArray + 6); // 第一种用法:最原始的语法(用下标) for (int i = 0; i < vec.size(); ++i)

Final基本的四种用法

final关键字代表最终.不可改变的. 常见四种用法:1. 可以用来修饰一个类2. 可以用来修饰一个方法3. 还可以用来修饰一个局部变量4. 还可以用来修饰一个成员变量 Java中有四种权限修饰符: public > protected > (default) > private同一个类(我自己) YES YES YES YES同一个包(我邻居) YES YES YES NO不同包子类(我儿子) YES YES NO NO不同包非子类(陌生人) YES NO NO NO 注意事项:(de

Synchronize 四种用法

Sync 四种用法 https://www.cnblogs.com/lukelook/p/9946065.html Sync 静态和非静态用法 https://blog.csdn.net/wangwang00001/article/details/80100716 原文地址:https://www.cnblogs.com/Jomini/p/12688681.html

C#中this的 四种 用法

C#中的this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码. this用法1:限定被相似的名称隐藏的成员 /// <summary> /// /******************************************/ /// /* this用法1:限定被相似的名称隐藏的成员 */ /// /******************************************/ /// </summ

js正则表达式的问号的几种用法

在表示重复的字符后面加问号,比如+?,*?,{2,3}?可以停止匹配的贪婪模式. 1 var pattern=/\w{2,3}/; 2 console.log("aaaa".match(pattern)[0]); 3 /*结果"aaa";贪婪模式下会尽可能多的匹配, 4 所以会匹配3个重复的字符 5 */ 6 var pattern2=/\w{2,3}?/; 7 console.log("aaaa".match(pattern2)[0]); 8

synchronized的四种用法

一 修饰方法  Synchronized修饰一个方法很简单,就是在方法的前面加synchronized,synchronized修饰方法和修饰一个代码块类似,只是作用范围不一样,修饰代码块是大括号括起来的范围,而修饰方法范围是整个函数. 例如: 方法一 public synchronized void method() { // todo } 方法二 public void method() { synchronized(this) { // todo } } 写法一修饰的是一个方法,写法二修饰