2011-07-06 11 views
1

私はかなりトリッキーな正規表現の問題があります。両辺を評価するルックアラウンド正規表現ですか?

次の文字列の+記号を空白で置き換える必要があります。したがって、左側の文字列は右側の文字列になります。

(?<=[\w\.,])\+(?=[\w]) 

しかし、私は隣接するプラス記号の唯一の爪1設定することができます。私は、プラス記号の前後に文字列をチェックするこの、と「日の大半を爪に管理している

1: word+word = word word 
2: word+++word = word + word 
3: word.+word = word. word 
4: word,+word = word, word 

(2)で一度に:私の現在の正規表現も、疲れた状態で

(?<=[\w\.,\+])\+(?=[\w]) // gets the left plus sign 
2: word+++word = word++ word 

(?<=[\w\.,])\+(?=[\w\+]) // gets the right plus sign 
2: word+++word = word ++word 

、私の方が大きい状態でパターンをラップする必要がある場合、私は思ったんだけど、または私はどちらかまたはパターンを実装する必要がある場合ルックアラウンドで。正規表現は、これを渦巻くように気を配っていますか?

+0

何についての 'FOO ++++バー++++++ baz'? – Qtax

+0

使用しているプログラミング言語は何ですか?すべてのフレーバーがルックアラウンドをサポートするとは限りません –

+0

あなたはあなたの正規表現に問題があるので正規表現が正しくないかもしれないので、何をしようとしているのでしょうか? – sawa

答えて

3

これはあなたの例で動作するはずです:

(?<!\+)\+|\+(?!\+) 

はスペースでそれを交換してください。

例:

perl -E "$_='a+b++a+++b++++c+++++d'; s/(?<!\+)\+|\+(?!\+)/ /g; say" 

出力:

a b a + b ++ C+++ d 
関連する問題