Delphi 正则表达式语法(10): 选项
// preCaseLess: 不区分大小写, 相当于其他语言中的 i
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil); reg.Subject := 'abc ABC aBc';
reg.RegEx := 'abc';
reg.Replacement := '◆'; reg.Options := [preCaseLess]; //选项是集合类型的 reg.ReplaceAll; ShowMessage(reg.Subject); //返回: ◆ ◆ ◆ FreeAndNil(reg);
end;
// preAnchored: 只匹配字符串开始, 相当于 ^, 不过还是有区别的
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil); reg.Subject := 'abc abc abc';
reg.RegEx := 'abc';
reg.Replacement := '◆'; reg.Options := [preAnchored]; //指定: preAnchored reg.ReplaceAll; ShowMessage(reg.Subject); //返回: ◆ abc abc FreeAndNil(reg);
end;
{preAnchored 选项和 ^ 的区别:
1、任何情况下, preAnchored 只匹配字符串开头;
2、在 preMultiLine 选项模式下, ^ 还能匹配每行的开头;
3、^ 还有其他用途.
}
// preDollarEndOnly: 让 $ 只匹配字符串结尾
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil); reg.Subject := 'abc abc abc'#13#10 +
'abc abc abc'#13#10 +
'abc abc abc';
reg.RegEx := 'abc$'; //当然需要有 $
reg.Replacement := '◆'; reg.Options := [preDollarEndOnly]; //指定: preDollarEndOnly reg.ReplaceAll; ShowMessage(reg.Subject);
{返回:
abc abc abc
abc abc abc
abc abc ◆
} FreeAndNil(reg);
end;
// preMultiLine: 多行匹配, 相当于其他语言中的 m
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil); reg.Subject := 'abc abc abc'#13#10 +
'abc abc abc'#13#10 +
'abc abc abc';
reg.RegEx := '^abc';
reg.Replacement := '◆'; reg.Options := [preMultiLine]; //指定: preMultiLine reg.ReplaceAll; ShowMessage(reg.Subject);
{返回:
◆ abc abc
◆ abc abc
◆ abc abc
}
{如果不指定 preMultiLine 将返回:
◆ abc abc
abc abc abc
abc abc abc
} FreeAndNil(reg);
end;
{
1、preMultiLine 是对 ^ 和 $ 的扩展使用;
2、在指定了 [preAnchored] 或 [preDollarEndOnly] 的情况下无效.
}
// preSingleLine: 让特殊符号 . 能够匹配换行符 (. 的本意是匹配换行符以外的任意字符)
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil); reg.Subject := 'aaa;bbb;'#13#10 +
'111;222;'#13#10 +
'AAA;BBB;';
reg.RegEx := ';.';
reg.Replacement := '◆'; reg.Options := [preSingleLine]; //指定: preSingleLine reg.ReplaceAll; ShowMessage(reg.Subject);
{返回:
aaa◆bb◆
111◆22◆
AAA◆BB;
}
{如果不指定 preMultiLine 将返回:
aaa◆bb;
111◆22;
AAA◆BB;
} FreeAndNil(reg);
end;
// preUnGreedy: 指定为非贪婪模式
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil); reg.Subject := '《Delphi》and《C++Builder》';
reg.RegEx := '《.*》'; reg.Replacement := '◆'; reg.Options := [preUnGreedy]; //指定: preUnGreedy
{ 在本例中, reg.RegEx := '《.*?》'; 可以达到同样的效果} reg.ReplaceAll; ShowMessage(reg.Subject); //返回: ◆and◆ ; 如果不指定 preUnGreedy, 将返回: ◆ FreeAndNil(reg);
end;
// preExtended: 指定为扩展模式
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil); reg.Subject := 'Delphi C++Builder';
reg.RegEx := 'i\x20C'; // \x20 是用十六进制的方式表示的空格 reg.Replacement := '◆'; reg.Options := [preExtended]; //指定: preExtended reg.ReplaceAll; ShowMessage(reg.Subject); //返回: Delph◆++Builder FreeAndNil(reg);
end;
{preExtended 是最复杂的一个选项:
1、它会忽略表达式中的空白, 譬如: 本例中的表达式如果是 'i C' 将不会匹配成功;
2、空白要用相应的十六进制表示, 譬如用 \x20 表示空格;
3、把表达式中从 # 到行尾的部分当作注释而被忽略;
4、如果要使用 # ,需要用 \# 代替;
5、表达式的标准注释是: (?#...) 及其中 # 后面的内容均为注释, 不管指定 preExtended 与否
}
关于选项 preExtra:
如果表达式中需要特殊字符 ^ $ ( ) [ ] { } . ? + * | \ 时, 需要加转义符号 \ ;
默认状态下, 其他字符前面添加了 \ 会识别为字符本身;
preExtra 选项应该就是禁止这种情况的, 也就是不要在非特殊字符前加 \ ;
但测试效果 ... 也许是我没弄明白!
还有三个状态选项: preNotBOL, preNotEOL, preNotEmpty
reg.State := [preNotBOL] 是让标记开始的 ^ 无效;
reg.State := [preNotEOL] 是让标记结尾的 $ 无效;
reg.State := [preNotEmpty] 没弄明白!
另外这些选择是可以组合使用的, 譬如:
reg.Options := [preCaseLess, preMultiLine, preSingleLine];
reg.State := [preNotBOL, preNotEOL];
Delphi 正则表达式语法(10): 选项的更多相关文章
- Delphi 正则表达式语法(7): 匹配转义字符
Delphi 正则表达式语法(7): 匹配转义字符 // ? 号的意义是匹配 0-1 次, 如果需要匹配 ? 怎么办 var reg: TPerlRegEx; begin reg := TPe ...
- Delphi 正则表达式语法(4): 常用转义字符与 .
Delphi 正则表达式语法(4): 常用转义字符与 . // \d 匹配所有数字, 相当于 [0-9] var reg: TPerlRegEx; begin reg := TPerlRegE ...
- Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索"
Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索" //匹配右边 var reg: TPerlRegEx; begin ...
- Delphi 正则表达式语法(8): 引用子表达式 - 也叫反向引用
Delphi 正则表达式语法(8): 引用子表达式 - 也叫反向引用 //准备: 我们先写一个搜索所有英文单词的表达式 var reg: TPerlRegEx; begin reg := TP ...
- Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配
Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配 //贪婪匹配 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); ...
- Delphi 正则表达式语法(5): 边界
Delphi 正则表达式语法(5): 边界 // \b 单词边界 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg ...
- Delphi 正则表达式语法(3): 匹配范围
Delphi 正则表达式语法(3): 匹配范围 // [A-Z]: 匹配所有大写字母 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(n ...
- Delphi 正则表达式语法(2): 或者与重复
Delphi 正则表达式语法(2): 或者与重复 // | 号的使用, | 是或者的意思 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create ...
- Delphi 正则表达式语法(1): 关于大小写与中文
Delphi 正则表达式语法(1): 关于大小写与中文 //替换一般字符串 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); ...
随机推荐
- 在一个验证form的实例中扩展jQuery.validate
需求很简单,直接上图: 要验证表单上的3个input输入框的格式,要求如下: 主关键词情形1: 浙江 杭州 温州 主关键词情形2: 浙江|江苏|上海,但是不能用 空格和 | 混合用,也就是情形1和2不 ...
- 企业Shell面试题5:解决DOS攻击生产案例
企业Shell面试题5:解决DOS攻击生产案例 写一个Shell脚本解决DOS攻击生产案例. 请根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100(读者根据实际情况设定 ...
- 【实验二】Spring框架笔记——NamedParameterJdbcTemplate与具名参数
在经典的 JDBC 用法中, SQL 参数是用占位符 ? 表示,并且受到位置的限制. 定位参数的问题在于, 一旦参数的顺序发生变化, 就必须改变参数绑定. 在 Spring JDBC 框架中, 绑定 ...
- 请写出一段JavaScript代码,要求页面有一个按钮,点击按钮弹出确认框。程序可以判断出用
请写出一段JavaScript代码,要求页面有一个按钮,点击按钮弹出确认框.程序可以判断出用 户点击的是“确认”还是“取消”. 解答: <HTML> <HEAD> <TI ...
- redis 分布式,主从同步
redis和memcache比较像的,memcache可以实现服务器的集群,redis肯定也是可以的.下面在一台机,实现redis主从复制. 1,copy一下redis.conf,生成一个从机的配置 ...
- 用python解析html--SGMLParser
sgmllib.py 包含一个重要的类: SGMLParser.SGMLParser 将 HTML 分解成有用的片段, 比如开始标记和结束标记.一旦它成功地分解出某个数据为一个有用的片段,它会根据 所 ...
- iOS-Pods里三方文件导入找不到头文件
解决办法: 在target 里面 选择 build setting 搜索User Header Search Paths 然后 里面添加一条 ${SRCROOT} recursive//后面填 ...
- tfs+git
TFS+GIT 一:背景介绍 技术团队的代码管理工具原来使用的是纯TFS方案,使用两年后发现一些问题:体积太大,每次新建一个分支需要本地下载一份代码:操作不便,功能分支的建立.合并不方便,本地有很多同 ...
- IEnumerable 与 Iqueryable 的区别
IEnumerable 和 IQueryable 共有两组 LINQ 标准查询运算符,一组在类型为 IEnumerable<T> 的对象上运行,另一组在类型为 IQueryable&l ...
- 【BZOJ4596】[Shoi2016]黑暗前的幻想乡 容斥+矩阵树定理
[BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打 ...