我不認爲這是可能的只是正則表達式,但我不是專家,所以我認爲這是值得問。正則表達式lookaround
我試圖做一個大規模的搜索和替換C#代碼,使用.NET正則表達式。我想要做的是找到一行代碼,其中在DateTime類型的變量上調用特定函數。例如:
axRecord.set_Field("CreatedDate", m_createdDate);
,我也知道這是在代碼文件中較早日期時間變量B/C是行:
DateTime m_createdDate;
但似乎我不能使用命名組像負回顧後:
(?<=DateTime \k<1>.+?)axRecord.set_[^ ]+ (?<1>[^)]+)
,如果我嘗試將變量聲明和函數調用這樣的所有文本匹配:
DateTime (?<1>[^;]+).+?axRecord.set.+?\k<1>
會找到它的第一場比賽 - 第一款基於第一個變量聲明 - ,但隨後無法找到任何其他比賽中,因爲代碼佈局是這樣的:
DateTime m_First;
DateTime m_Second;
...
axRecord.set_Field("something", m_First);
axRecord.set_Field("somethingElse", m_Second);
和第一場比賽包含第二個變量聲明。
是否有一種很好的方法只用正則表達式來做到這一點,還是我必須訴諸於我的邏輯腳本?
這是一個很好的解決方案,但對於第二天左右,除非Jan Goyvaerts進來並說這是不可能的,否則我會認爲它是:) – LoveMeSomeCode 2009-01-08 18:35:09
@LoveMeSomeCode,這是一個臨界不可能的問題。考慮到這一點,如果你想讓它在任何C/C#代碼中100%的時間內工作,用正則表達式是不可能的。正則表達式不如解析器強大。另一方面,如果你想在你的特定項目中的代碼解決方案,它可能是 – JaredPar 2009-01-08 19:09:33