[英]Visual Studio 2015 Regex Replace Not Working (Regex Match Working)
[英]Visual Studio 2015 community - Regex Find and Replace
我正在尝试编写一个正则表达式来查找和替换Visual Studio中的代码。
以下是现有代码的示例:
GameObject go = Instantiate(...);
GameObject go2 = (GameObject)Instantiate(...);
GameObject go3 = ReplaceThis.Instantiate(...);
GameObject go4 = DontReplaceThis.Instantiate(...);
我基本上需要一个正则表达式来将代码段更改为以下内容:
GameObject go = ReplacedClass.Instantiate(...);
GameObject go2 = (GameObject)ReplacedClass.Instantiate(...);
GameObject go3 = ReplacedClass.Instantiate(...);
GameObject go4 = DontReplaceThis.Instantiate(...);
如您所见, DontReplaceThis.Instantiate(...);
是唯一没有被替换的。
到目前为止,我有:
Find: (?=.*Instantiate)(?=?!DontReplaceThis.)
直到我添加?=
逻辑和regex表达式为止。
编辑:
本质上,我希望有一个正则表达式可以查找并替换与(.*Instantiate)
匹配但在类作用域的Member Of Operator之前不包含DontReplace
的所有内容。 它还应将替换字符串附加到.Instantiate
所有实例上, .Instantiate
使它们成为ReplacedClass.Instantiate
您可以使用
(?:\w+\.)?(?<!\bDontReplaceThis\.[\w.]*)(\bInstantiate)(?=\()
细节
(?:\\w+\\.)?
-的可选(如(...)
,例如不应匹配)序列
\\w+
-1个或多个字字符 \\.
-一个.
烧焦 (?<!\\bDontReplaceThis\\.[\\w.]*)
-如果没有DontReplaceThis.
则负向后DontReplaceThis.
匹配失败DontReplaceThis.
整个单词( \\b
是单词边界),后跟0+单词或.
立即在当前位置的左侧字符(有效地,它会失败匹配var x = DontReplaceThis.Some.Class.Instantiate(...)
,如果您需要匹配它,则需要删除[\\w.]*
) (\\bInstantiate)
-与Instantiate
匹配的组1( $1
) (?=\\()
-后跟一个(
字符(由于正先行而未添加到匹配中)。 结果:
由于您正在寻找Instantiate
作为方法调用,并且只希望在DontReplaceThis.
之前没有它的情况下将其替换DontReplaceThis.
您可以在后面使用否定式:
搜索模式:
((\w+\.)|\s)?(?<!DontReplaceThis\.)(Instantiate\()
更换方式:
ReplacedClass.$3
说明:
?<!
仅在没有以下字符串的情况下匹配。 (在这种情况下: DontReplaceThis
)
((\\w+\\.)|\\s)?
如果前面有任一个,则匹配optionaly
\\w+\\.
任何出现1次或多次并后跟一个点的单词字符
|
要么
\\s
任何空格字符
\\(
匹配括号。方法调用的指示
(Instantiate\\()
括号定义了一个可以用$3
替换模式访问的组(插入第三个匹配的组)
有关更多信息,请查看正则表达式
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.