[英]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.