1

C++コードの代入演算子の周りにスペースを追加できる正規表現を作成したいと思います(私はこのスタイルが好きです)。

x=something

になる

x = something

しかし

if(y==x)

ならない

if(y = = x)

などを含む!=, <=,>=

私は正規表現に比較的慣れていないため、次のことを試しました。

(?<![\s=])(=)(?!=)

これは良いスターターになると思いましたが、これは一致しないようです。ここで正規表現について私が理解していないことを誰かが説明できますか?

編集

Code::Blocks IDE で一致しない正規表現を使用した例

Code::BLocks 正規表現の試行

4

2 に答える 2

3

次のようなものを試してください:(?<![<>=!])\s*=\s*(?!=)に置き換えてください=

また

([^<>=!])\s*=\s*([^=])交換された\1 = \2

パターンが固定されていないため、両方のルックアラウンド アサーションが必要です。

あなた自身の正規表現は、実際に<>は文字クラスに欠けていました。私はそれを少し改善しました。デモを見てください。

最初の正規表現のデモと説明: http://regex101.com/r/kU1hP2 2 番目の正規表現のデモと説明: http://regex101.com/r/lK1oQ3

注:\s空白にマッチします!

于 2013-01-15T13:11:01.747 に答える
1

それはすべてをカバーしていません。

スペースが必要な場合は、もう少し検討する必要があります。

これを試してください http://regex101.com/r/oJ8jJ3

((!|<|>|=|\+|%)=|=)

\1 セパレーターを使用します

一部のスタイルの正規表現では、次のようになります。

s/((!|<|>|=|\+|%)=|=)/ \1 /g

幸運を!PS 考慮されるケース:

x=something
if(y==x)
if(y <=x)
if(y>=x)
y+=x;
y%=x;
于 2013-01-15T13:40:19.620 に答える