zoukankan      html  css  js  c++  java
  • Delphi 正则表达式

    目录

    1. 基本用法
    2. 转义字符
    3. 边界
    4. 临界匹配
    5. 匹配模式选项

     

    安装步骤:Delphi 正则表达式起步

    基本用法:

    with reg do 
    begin
      Subject:= str; //要进行操作的字符串        
      RegEx  := str1; //要被替换的子字符串
      Replacement := str2; //被替换成的字符串
         // (str1=>str2)
      ReplaceAll;//执行替换
         str:= Subject; //取回替换后的字符串。
    end
    //属性:preCaseLess 不区分大小写
    reg.Options := [preCaseLess];

    注意:不区分大小写后,中文替换会出现错误(中文也不区分了……)

    //|:或者
    reg.RegEx   := 'e|Delphi|0'; //将e、Delphi、0替换成想要的字符串
    
    //+:重复一个或多个
    reg.RegEx   := 'ab+'; //将ab、abb、abbb等替换,最大替换原则
    
    //*:重复0个或多个
    reg.RegEx   := 'ab*'; //将a、ab、abb、abbb等替换,最大替换原则
    
    //?重复 0 个或 1 个
    reg.RegEx   := 'ab?'; //将a、ab替换,ab优先。
    
    //{}大括号
    //{num}:指定重复num次
    //{num1, num2}:重复num1~num2次
    //{num,}:重复num次或以上
    //[ ]匹配范围,将与方括号中想匹配的“字符”匹配
    //可以是:[a-z]、[A-Z]、[0-9]、[fajdl;gkhalu]
    //[^ ]不匹配范围,与匹配相反

    注意:[ ]只用来匹配单个字符

    转义字符

    //转义字符
    
    // d 匹配所有数字, 相当于 [0-9]
    // D 匹配所有非数字, 相当于 [^0-9]
    
    // w 匹配字母、数字与下划线_, 相当于 [A-Za-z0-9_]
    // W 匹配非字母、数字与下划线_, 相当于 [^A-Za-z0-9_]
    
    // s 匹配任何空白, 包括空格、制表、换页等, 相当于 [f
    
    	v]
    // S 匹配任何非空白, 相当于 [^f
    
    	v]
    
    // x 匹配十六进制的 ASCII
    // . 匹配除换行符以外的任何字符
    
    {
      f : 换页符
      
     : 换行符
      
     : 回车符
      	 : 制表符(Tab)
      v : 垂直制表符
    }

     边界:

    //  单词边界
      reg.Subject := 'Delphi Delphi2007 MyDelphi'; 
      reg.RegEx   := 'Delphi'; //前后边界
      reg.Replacement := '';
      reg.ReplaceAll;
    //结果为“◆ Delphi2007 MyDelphi”
    
    
      reg.RegEx   := 'Delphi'; //左边界
    //结果为“◆ ◆2007 MyDelphi”
    
    reg.RegEx   := 'Delphi'; //右边界
    //结果为“◆ Delphi2007 My◆”
    
    
    // B 非单词边界
    
    // ^ 行首
      reg.RegEx   := '^Del'; //匹配在行首的 Del
    //返回: ◆phi Delphi2007 MyDelphi
    
    // A 也标记行首
      reg.RegEx   := 'ADel'; //匹配在行首的 Del
    //返回: ◆phi Delphi2007 MyDelphi
    
    
    // $ 行尾
      reg.RegEx   := 'phi$'; //匹配在行尾的 phi
    //返回: Delphi Delphi2007 MyDel◆
    
    //  也标记行尾
      reg.RegEx   := 'phi'; //匹配在行尾的 phi
    //返回: Delphi Delphi2007 MyDel◆
    //正规表达式一般默认为贪婪匹配
    //默认规则1.从最左边开始匹配
    //默认规则2.在符合要求的情况下尽量匹配到最右边(符合1的前提下匹配最长的串)
    
      reg.Subject := '<html><head><title>标题</title></head><body>内容</body></html>';
      reg.RegEx   := '<.*>'; //将会全部匹配, 因为两头分别是: < 和 >
      reg.Replacement := '';
    //贪婪匹配,结果为“◆”
    
      reg.Subject := '<html><head><title>标题</title></head><body>内容</body></html>';
      reg.RegEx   := '<.*?>'; // *? 是非贪婪匹配方法之一, 将匹配每组 <>
      reg.Replacement := '';
    //非贪婪匹配,结果为“◆◆◆标题◆◆◆内容◆◆”
    
    //区别是加了个问号。

     引用子表达式

    //1. 子表达式要用“( )”括起
    //2. 从左到右依次为123……按左括号排序,包括嵌套的字表达式
    //3. 0 表示整个表达式
    
      reg.Subject := 'one two three ten';
      reg.RegEx   := '(t)(w+)';
      reg.Replacement := '[1-2:]'; // 12 分别引用对应的子表达式; 0 引用整个表达式
    //结果: one [t-wo:two] [t-hree:three] [t-en:ten]

    临界匹配

    //(?=xxx) 匹配到xxx之前的位置
    //(?<=xxx)匹配到xxx之后的位置
    //把上面的“=”改为“!”,不匹配原来得到的结果
    
      reg.Subject := 'Delphi 6; Delphi 7; Delphi 2007; Delphi Net';
      reg.RegEx   := 'Delphi (?=2007)'; // ?=
      reg.Replacement := '';
     //结果: Delphi 6; Delphi 7; ◆2007; Delphi Net
    
    
      reg.Subject := '111, 222, ¥333, ¥444';
      reg.RegEx   := '(?<=¥)d{3}'; // ?<=
      reg.Replacement := '';
      reg.ReplaceAll;
    //结果: 111, 222, ¥◆, ¥◆
    
      reg.Subject := '111, 222, ¥333, ¥444';
      reg.RegEx   := '(?<!¥)d{3}'; // ?<!
      reg.Replacement := '';
    //结果: ◆, ◆, ¥333, ¥444

    匹配的选项

    // preCaseLess: 不区分大小写, 相当于其他语言中的 i
    // preAnchored: 只匹配字符串开始, 相当于 ^, 不过还是有区别的
    // preDollarEndOnly: 让 $ 只匹配字符串结尾
    // preMultiLine: 多行匹配, 相当于其他语言中的 m
    // preSingleLine: 让特殊符号 . 能够匹配换行符 (. 的本意是匹配换行符以外的任意字符)
    // preUnGreedy: 指定为非贪婪模式
    // preExtended: 指定为扩展模式
    
    //抄自:万一的博客http://www.cnblogs.com/del/archive/2007/12/21/1009363.html
  • 相关阅读:
    Ubuntu将Python3软连接到Python
    装有Ubuntu的硬盘插入到电脑中无法进入
    如何更改鼠标右键新建内容
    HDU 1113 Word Amalgamation
    暴力题,速算24点
    网络营销整合
    灰色预测代码
    灾情巡视C语言代码
    灰色关联度Matlab代码
    BP神经网络代码
  • 原文地址:https://www.cnblogs.com/laymond/p/3394543.html
Copyright © 2011-2022 走看看