zoukankan      html  css  js  c++  java
  • 正则表达式-问号的四种用法

    (1).原文符号
    因为?在正则表达式中有特殊的含义,所以如果想匹配?本身,则需要转义,?
    
    (2).有无量词
    问号可以表示重复前面内容的0次或一次,也就是要么不出现,要么出现一次。
    
    (3).(非)贪婪匹配
    贪婪匹配
    在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配
    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次以上,但尽可能少重复
    
    
    (4).不捕捉模式
    
    如何关闭圆括号的捕获能力?而只是用它来做分组,方法是在左括号的后边加上:?,这里第一个圆括弧只是用来分组,而不会占用捕获变量,所以$1的内容只能是steak或者burger,而永远不可能是bronto。
    while(<>){
        if(/(?:bronto)(steak|burger)/){
            print "Fred wants a $1
    " ;
        }
    }
    
    
  • 相关阅读:
    第 425 期 Python 周刊
    第 423 期 Python 周刊
    第423期 Python 周刊
    Python Weekly 422
    第421期 Python 周刊
    第420期 Python 周刊
    LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters
    Python Weekly 419
    LeetCode 771: 宝石与石头 Jewels and Stones
    LeetCode 652: 寻找重复的子树 Find Duplicate Subtrees
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/7563535.html
Copyright © 2011-2022 走看看