2016-05-16 19 views
1

私は、8000個程度のソースコードファイルでいくつかの変数を他の形式に置き換えることができる小さなユーティリティを作成しようとしています。意図的にハイフンを無視する

たとえば、次のような種類のソースコードがProgress4GLで書かれています。 注:Progress4GLは、変数名にハイフンを使用することができます:私は正規表現(crudefn.segment-id)(\[)を使用する場合

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

が、私は正確にcrudefn.segment-id

ののoccuranceを見つける必要があり、それは等号の両方の部分でそれを見つけました。

この場合、​​は別の変数ですが、置き換えたくありません。

私は唯一の変数crudefn.segment-id

私は正規表現[^\-](crudefn.segment-id)(\[)を使用して、ハイフンを無視しようとすると、それはまた、私はしたくない試合結果("=crudefn.segment-id[")、中に等号が含まを交換したいです。いくつかのケースでは、ソースコードは次のようである:

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

や他のいくつかの例では、このようなものだ:

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

+1

'[試してみてください(< - ?!)\ bcrudefn \ .segment-IDの\の['](https://regex101.com/r/qQ6zZ8/2) –

答えて

1

それはあなたが単語全体としてcrudefn単語を一致させたいけど除くようですハイフンの後の位置。

あなたはregex demo

\bワード境界が非単語文字の後に単語crudefn試合を行います、とハイフンあれば負の後読み(?<!-)が試合を失敗するを参照してください

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

を使用することができますこの言葉のすぐ前に現れます。また

、あなたは何を調べる必要があり、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

関連する問題