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

    原文符号

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

    有无量词

    问号可以表示重复前面内容的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" ;
        }
    }

  • 相关阅读:
    Pytest单元测试框架之FixTure内置临时文件tmpdir操作
    Python+Request库+第三方平台实现验证码识别示例
    Pytest单元测试框架之parametrize参数化
    Pytest单元测试框架之setup/teardown模块示例操作
    mysql匿名账户登录导致的"ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'"错误
    求全排列
    (转载)你真的会写单例模式吗——Java实现
    《大话设计模式》之--第14章 老板回来,我不知道----观察者模式
    关于java Integer大小比较的问题
    Java char[] 数组转为 String 的两种方式
  • 原文地址:https://www.cnblogs.com/graphics/p/1749707.html
Copyright © 2011-2022 走看看