使用Visual Studio(2012)查找并替换正则表达式,如何匹配可能重复的多个元素序列(而不仅仅是重复的单个字符)?
具体来说,我试图在公共void方法中找到属性(MyAttribute
)的用法,其中可能存在多行。例如,我想找到两个:
[MyAttribute]
public void Method1()
和
[MyAttribute]
[AnotherAttribute]
//A comment
public void Method2()
我可以通过以下方式找到第一个案例:
MyAttribute.*\r?\npublic void
但我不知道如何指定中间可能有多行的更一般情况。我试过了:
MyAttribute(.*\r?\n)*public void
但这会让我的VS挂起。
答案 0 :(得分:1)
您可以使用
(?m)^(?:[\s\r]*(?:\[[^]]*\]|//.*)[\s\r]*)+public\s+void[^(]*?\(.*?\)
它会匹配所有评论和[sometext]
- 与public void something(something...)
后面的行匹配。
VS2012中一个非常奇怪的故障是匹配换行符:\s
通常匹配\r
和\n
,但在VS2012中,我们需要手动添加\r
一个[\s\r]
个字符类。
请参阅demo
答案 1 :(得分:1)
使用反射:
INSERT INTO ebdb.requestaction(RequestID,
ActionID,
TransactionID,
IsActive,
IsComplete)
VALUES (
1,
**Dynamic Value from Below Query,
Dynamic Value from Below Query,**
1,
0);
您可以调整如何获得装配。 这将获取程序集上的所有类型,然后是所有方法,然后将其过滤为具有MyAttribute类型的公共类型,并且没有参数。
答案 2 :(得分:0)
使用Visual Studio(2012)正则表达式... ...搜索特定的内容(例如MyAttribute),然后搜索一个或多个 完整或空行,然后是另一个特定的字符串
在Visual Studio中使用此
\[MyAttribute\][\s\r\n\W\w]+?public
基本上说找到特定字符串" [MyAttribute]"然后为一个或多个(前面的字符项){{1}找到任何空格或制表符\s
,回车,换行符,\r\n
,非单词和单词项\W\w
},然后尽可能少(最小)+
直到它找到特定的单词" public"。
这里正在运行
?
= \S
- \W\w
表示任何非空白字符。
因此可以缩短模式,例如
\S
将模式更改为
\[MyAttribute\][\s\r\n\S]+?public
只能找到" public void"。