正则表达式匹配指定字符串之外的内容 ^(?!.*?排除的字符串).*$
工作中经常遇到分析log文件, 想从文件中找到和对应数据的内容,其他的内容不关心.
这样就想用一个正则表达式匹配指定字符串之外的内容,替换成空的, 剩下就是我们关心的log内容
^(?!.*?正则表达式).*$
问题情境
需要将RDL报表里的GetComment( Parameters!F0001.Value , Parameters!F0002.Value ,"total", Parameters!Language.Value)函数修改为GetCommentForComment
( Parameters!F0001.Value , Parameters!F0002.Value ,"total", Parameters!Language.Value, "ReportConnection0107"
)。
思路
使用正则表达式里面的分组进行抓获,再用\1将中间固定的参数取出,组成新的字符串。
Vim实现
%s/GetComment(\(\(\s*\w\+!\w\+.\w\+\s*,\)\{2\}\s*"\w\+"\s*,\s*\w\+!\w\+.\w\+\s*\))/GetCommentForReport(\1,
"ReportConnection0107")/gc
解释:%为全局替换,s为替换。后面则是表达式,和正则表达式差不多,注意是*不需要转义,+ 和 .需要转义,最后的g代表当前行替换,c代表每次替换需要确认。
目标表达式中有\1,代表抓获的第一个字符串,多个字符串抓获则依次往下排列。\0表示原始字符串。
NotePad++/EditPlus实现
GetComment\(( *[a-zA-Z0-9]+![a-zA-Z0-9]+\.[a-zA-Z0-9]+ *,
*[a-zA-Z0-9]+![a-zA-Z0-9]+\.[a-zA-Z0-9]+ *, *"[a-zA-Z0-9]+" *,
*[a-zA-Z0-9]+![a-zA-Z0-9]+\.[a-zA-Z0-9]+ *)\)
替换为GetCommentForReport(\1, "ReportConnection0107")
解释:不知道为何,我无法使用\w\s匹配文字和空格,只能使用[a-zA-Z0-9]表示(完整的是[a-zA-Z0-9_])\w,用空格表示\s。
VisualStudio
由于RDL开发必然使用VisualStudio,所以用VS替换更方便。
GetComment\({ *[a-zA-Z0-9]+![a-zA-Z0-9]+\.[a-zA-Z0-9]+ *,
*[a-zA-Z0-9]+![a-zA-Z0-9]+\.[a-zA-Z0-9]+ *, *"[a-zA-Z0-9]+" *,
*[a-zA-Z0-9]+![a-zA-Z0-9]+\.[a-zA-Z0-9]+ *}\)
依旧替换为GetCommentForReport(\1, "ReportConnection0107")
解释:VS除了NotePad++/EditPlus的问题外,还有一个严重的问题就是他抓取的不是分组(),而是抓获的花括号{}抓捕的字符串,官方的称呼叫做“带标记的表达式”,详情可以参考MSDN 正则表达式 (Visual Studio)
。
PS
所以咯,Vimer,你懂的~
原文地址:http://dddspace.com/2011/01/regex-group-catch.html
分享到:
相关推荐
C#正则表达式专题学习(很不错)附正则测试工具C#正则表达式专题学习(很不错)附正则测试工具
简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下: 测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为...
格式完美,正则必下本书所讲授的关于正则表达式知识正是你们在刚起步时最需要的,我们将从简单的文本匹配开始循序渐进地向大家介绍许多复杂的专题,其中包括回溯引用(backreference,或译为后向引用)、条件性求值...
精品技术论坛的资料 对正则有兴趣的朋友可以看看.
python专题——正则表达式[整理].pdf
精通正则表达式.pdf,正则表达式30分钟入门教程_files,命令行和正则表达式专题·chm.chm,正则表达式30分钟入门教程.htm,RegexTester.exe
C#、Java、C++、VB、Javascript、Ruby等)、数以亿万计的各种应用软件中,都可以看到正则表达式优美的舞姿。(百度百科)。正则表达式基本上应用在目前主流语言上,学了,是很有用,不仅仅只是易语言。二、正则的...
J2SE专题-正则表达式源代码-非常全面 J2SE专题-正则表达式源代码-非常全面
python专题——正则表达式借鉴.pdf
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。正则表达式是由普通字符(例如字符 a 到 z)以及...
正则表达式是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。模式描述在搜索文本时要匹配的一个或多个字符串。RegExp 对象表示正则表达式,它是对字符串执行模式匹配的强大...
1.JavaScript的数值处理对象学习 .txt 2.JavaScript的系统函数学习 .txt 3.js中用于对象的语句——with和for...in语句学习专题.txt 4.smallSoftkey小软键盘,...正则表达式.txt 9.55种网页常用小技巧 .txt
1.正则表达式基本语法 两个特殊的符号’^’和’$’。他们的作用是分别指出一个字符串的开始和结束。 例子如下: “^The”:表示所有以”The”开始的字符串(”There”,”The cat”等); “of despair$”:表示所以...
1、JS正则表达式一条龙讲解(从原理和语法到JS正则) //www.jb51.net/article/110516.htm 2、教你轻松记住JS正则表达式 //www.jb51.net/article/88838.htm 有没有人像小编一样,学了好几遍正则表达式却还是很懵圈,...
(推荐)JS正则知识点专题://www.jb51.net/article/139831.htm //判断输入内容是否为空 function IsNull(){ var str = document.getElementById('str').value.trim(); if(str.length==0){ alert('对不起,...
php的正则表达式专题 php通用检测函数集 PHP中的POST&GET的应用 PHP注入实例 Portable PHP Code ProjectForum Multiple Vulnerabilities PTNews远程管理脚本未授权访问缺陷 Session Tracking Part I Session ...
在问答过程中,我收集到学习正则表达式过程中的某些普遍问题,在这里专门花一点篇幅来回答 正则表达式是难学的,这不存在疑义。但是我认为,难点也只在语法方面。正则表达式已经有年头了,它(的语法)诞生于上世纪...
一本非常好的正则指引的书,书中涵盖很多正则表达式的使用方法