2016-05-16 56 views
1

我想寫一個小實用程序,它可以在大約8000個源代碼文件中將某些變量替換爲某種其他格式。故意忽略連字符

例如,我在Progress4GL上編寫了以下類型的源代碼。 注:Progress4GL允許在變量名中使用連字符:

where x-crudefn.segment-id[5] =crudefn.segment-id[v-idx] 

我需要找到準確的crudefn.segment-id

的次數當我使用正則表達式(crudefn.segment-id)(\[),它發現它在等號的兩個部分。

在這種情況下,​​是另一個我不想替換的變量。

我只想替換變量crudefn.segment-id

當我嘗試使用正則表達式[^\-](crudefn.segment-id)(\[)忽略連字符,還包括在比賽結果("=crudefn.segment-id[")等號,這是我不想要的。在某些情況下,源代碼是這樣的:

where x-crudefn.segment-id[5] =crudefn.segment-id[v-idx] 

,並在其他一些情況下是這樣的:看來你要的crudefn字匹配整個單詞,但不包括

where x-crudefn.segment-id[5] = a + crudefn.segment-id[v-idx]

+1

嘗試['(< - !)\ bcrudefn \ .SEGMENT-ID \ ['](https://regex101.com/r/qQ6zZ8/2) –

回答

1

連字符後的位置。

您可以使用

(?<!-)\bcrudefn\.segment-id\[ 

regex demo

\b字邊界將使字crudefn匹配非單詞字符之後,和負回顧後(?<!-)將失敗的比賽,如果連字符出現在這個詞的前面。

另外,還要注意一個點必須逃到匹配一個點(否則,它會匹配任何字符,但換行符。)

在Java中,

String pattern = "(?<!-)\\bcrudefn\\.segment-id\\["; 
0

你應該看看了什麼構成變量名稱。
然後在它周圍構造​​一個正則表達式。

I.e.用一句話開頭,用一個字,等結束......

(?<![-\w])crudefn\.segment-id(?![-\w])

這樣你就不必擔心愚蠢的字邊界
和雜散標點符號。

https://regex101.com/r/qQ6zZ8/4

+0

非常感謝你。它工作正常 – user1877031

+0

@ user1877031 - https://regex101.com/r/qQ6zZ8/5 – sln