正则表达式匹配指定字符串之外的内容 ^(?!.*?排除的字符串).*$
工作中经常遇到分析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#正则表达式的使用,帮助开发者更好地理解和运用这一功能。 一、正则表达式基础 1. 正则表达式基本元素:包括普通字符(如字母、数字)、特殊字符(如\. \* \? \+)、元字符(如^ $ * + ? { ...
在"马士兵JAVA视频教程J2SE专题正则表达式01正则表达式简介avi.flv"中,你将学习到: 1. 正则表达式的组成元素:包括普通字符(如a-z、A-Z、0-9)和特殊字符(如`.`、`*`、`+`、`?`、`^`、`$`、`|`、`\`等)。特殊...
《命令行和正则表达式专题·chm.chm》是关于如何在命令行环境中使用正则表达式的专题指南。在Linux、Unix或Windows的命令行中,正则表达式常用于文件查找、内容过滤等任务,这个专题可能详细讲解了相关命令和技巧。 ...
简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具。其作用如下: 测试字符串的某个模式。例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为...
Python中的正则表达式是处理文本模式匹配的强大工具,它允许程序员通过简洁的语法来查找、替换或提取字符串中的特定模式。以下是对正则表达式关键概念的详细解释: 1. **简介**: - 正则表达式是用于描述字符串...
格式完美,正则必下本书所讲授的关于正则表达式知识正是你们在刚起步时最需要的,我们将从简单的文本匹配开始循序渐进地向大家介绍许多复杂的专题,其中包括回溯引用(backreference,或译为后向引用)、条件性求值...
精品技术论坛的资料 对正则有兴趣的朋友可以看看.
Python 正则表达式知识点 正则表达式是一种文本模式,包括普通字符和特殊字符。正则表达式使用单个字符串来描述、匹配一系列某个句法规则的字符串。下面是对正则表达式的详细说明: 1. 普通字符:普通字符包括没有...
最后,文章提供了更多关于jQuery的内容链接,包括jQuery正则表达式用法、字符串操作技巧、XML操作技巧、扩展技巧以及选择器使用等专题,这些链接指向的内容可以让开发者深入学习和掌握jQuery的更多高级功能和用法,...
C#、Java、C++、VB、Javascript、Ruby等)、数以亿万计的各种应用软件中,都可以看到正则表达式优美的舞姿。(百度百科)。正则表达式基本上应用在目前主流语言上,学了,是很有用,不仅仅只是易语言。二、正则的...
最后,本文还列举了其他一些关于JavaScript的专题,包括正则表达式的技巧、JavaScript中的查找和替换操作技巧、数据结构与算法技巧、json操作技巧、错误与调试技巧、数学运算用法等。这些内容对于JavaScript程序设计...
文中还提到了一系列有关Python学习的专题,包括正则表达式的其他用法、数据结构与算法、Socket编程、函数使用技巧、字符串操作、Python入门与进阶教程以及文件与目录操作技巧。这些资源可以帮助读者更全面地掌握...
在探讨WinForm使用正则表达式提取内容的方法时,首先需要了解WinForm的基本概念以及正则表达式的作用与语法。 WinForm是Windows Forms的简称,它是.NET Framework中用于构建Windows桌面应用程序的一个类库。它提供...
正则表达式是处理字符串的...最后,文中推荐了关于JavaScript正则表达式的多个专题学习资源,包括正则表达式技巧大全、替换操作技巧总结等,这些内容可以帮助JavaScript开发者深入学习和掌握正则表达式相关的编程技巧。
除了这些基本操作,文档还提供了一些额外的资源,比如推荐的正则表达式在线测试和生成工具,以及有关Python编程的其他专题链接,这些都是提高Python编程技巧的有用资源。 最后,文章结尾部分的PS内容提醒,由于文档...
在讨论JavaScript中的正则表达式时,贪婪匹配和懒惰匹配是非常重要的概念。这两种匹配方式决定了正则...如文末提供的链接,读者可以继续探索更多与正则表达式相关的专题,以加深对JavaScript正则表达式应用的理解。
正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。正则表达式是由普通字符(例如字符 a 到 z)以及...