ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3339|回复: 4

[讨论] {1,}和@的异同点

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-9-5 00:02 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
{1,}和@的异同点
以下是学习守版、sylun兄和卡卡兄关于{1,}和@的异同点的观点后,个人进行组织与提炼,如有错误,请指正:
1、"{1,}"中的最大匹配项数为255,即前一个字符或者表达式的至少1次最多255次的匹配;而"@"没有限制(极限目前未知)。
2、在表达式没有后面后限制时,"{1,}"是贪婪匹配,而"@"是最小匹配。如"1234567890”文本中查找"[0-9]{1,}"时,它返回所有匹配项(1234567890)(共计1处),而查找"[0-9]@"时,它返回"1"(共计10处),它是最小限度匹配。
3、对于前者(即{1,}),其后可以不用其他字符限定;而后者(即@)通常是需要的,否则它是多余的。
4、如果前者(即{1,})后面用了其他字符来限定,注意限定字符不能在前者所规定的范围内,否则会导致冲突;若前后为非同类字符(比如汉字与字母、汉字与数字、字母与数字)时就可用。而@则不会受此限制。
实例1(请参考上面的第2、3点说明)
123456789  987654321  741852963  369258147 369874125 159 357 123  4546  9875
查找“[0-9]{1,}”,共找到10处
查找“[0-9]@ ”,共找到62处
理由:
因为查找代码“[0-9]@”中@后面没有限定字符,所以@是多余的,整个代码相当于[0-9]。
实例2(请参考上面的第4点说明)
中国中国我爱你,就像老鼠爱大米  老婆老婆我爱你,就像老鼠爱大米
用“[一-龥]@我爱你”可以找到2处,即“中国中国我爱你”和“老婆老婆我爱你”;
用“[一-龥]{1,}我爱你”则找不到匹配的项
理由:
“我爱你”这三个汉字均在“一-龥”范围内
实例3(请参考上面的第2点说明)
①1234567890--1234567890--1234567890--1234567890--1234567890
查找:“[1-4]{1,}”,替换为:“Y”:的结果:(共替换5处)
Y567890--Y567890--Y567890--Y567890--Y567890
查找:“[1-4]@”,替换为:“Y”的结果:(共替换20处)
YYYY567890--YYYY567890--“YYYY567890--YYYY567890--YYYY567890
理由:
{1,}"是贪婪匹配,查找:“[1-4]{1,}”,它返回所有匹配项,即查找范围中的连续字符(一个或多个)作为整体后,也就是“1234567890--1234567890--1234567890--1234567890—1234567890”中的红色数字部分将其替换为“Y”;
而"@"是最小匹配,即查找中的所有范围内的字符作为个体后(本例即为将“1234567890--1234567890--1234567890--1234567890—1234567890”这些数字作为个体),将其替换为“Y”
②1324657890--2456789031--2516748930--1345672890—1356278904
查找:“[1-4]{1,}”,替换为:“Y”:的结果:(共替换12处)
Y657890--Y567890Y--Y5Y67Y89Y0--Y567Y890--Y56Y7890Y
查找:“[1-4]@”,替换为:“Y”的结果:(共替换20处)
YYYY657890--YY567890YY--Y5Y67Y89Y0--YYY567Y890--YY56Y7890Y
理由:
{1,}"是贪婪匹配,查找:“[1-4]{1,}”, 它返回所有匹配项,即查找范围的连续数字(一个或多个)作为整体后,将其替换为“Y”;即“1324657890--2456789031--2516748930--1345672890--1356278904”中的红色部分的数字作为个体后,将其替换为“Y”;
而"@"是最小匹配,即查找中的所有范围内的字符作为个体后(本例即为将“1324657890--2456789031--2516748930--1345672890--1356278904”这些数字作为个体),分别替换为“Y”

[ 本帖最后由 tangqingfu 于 2009-9-5 16:33 编辑 ]

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-9-5 12:32 | 显示全部楼层
谢谢高手分享!真是分析的很详细也很精辟。再次感谢高手无私奉献!

TA的精华主题

TA的得分主题

发表于 2010-7-1 09:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2017-7-31 21:38 | 显示全部楼层
好资料,谢谢唐兄弟的精心整理。

TA的精华主题

TA的得分主题

发表于 2017-10-13 12:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 04:18 , Processed in 0.044248 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表