2012-05-06 15 views
4

正規表現を作成するのに助けが必要です。私は文字列内の特定の単語を探すソフトウェアをプログラミングしています。でも、私はのフレーズを探す必要があります。この文字列は、ユーザーによってテキストボックスに入力されます。二重引用符で囲まれたゲットフレーズの正規表現

は現在、私はアンパサンドでスペースを交換するには、次の正規表現\s+を使用します。 word1 word2 word3

私の新しい要件word1&word2&word3するにはGoogleでフレーズ検索のように、引用符で囲まれたフレーズを含める必要があります。

"word1 word2" "word3 word4" word5 

でなければなりません:事前に

word1 word2&word3 word4&word5 

感謝。

EDIT:同じ方法を実行する別の方法や別の方法がある場合は、私は何らかのアイデアを公開しています。

+0

あなたはもう正規言語を持っていません。 – Paulpro

+0

正規表現ではできません:正規表現は何らカウントをサポートしていません。奇数の引用符と偶数の引用符を見たときのアクションが異なるため、ここでは数え上げる必要があります。 1行に引用される項目の数に合理的に低い制限がある場合は、自分で数えることでそれを偽造することができますが、表現がきれいになるわけではありません。それ以外の場合は、より堅牢なものを構築する必要があります。 – dasblinkenlight

+0

@ PaulP.R.O。なぜそれは定期的ではないのですか? – Kobi

答えて

5

これは、クエストが均衡していることを前提としています。クエストは偶数であり、単語の途中ではクエストではありません。

/"([^"]+)"|(\S+)/と一致させることができます。これにより、引用符付きの文字列または空白以外の単語が表示されます。それはグループ1 または 2の単語を取得したので、結果は&デリミタでjoinになります。

もう1つのオプション:トークンをスキップして、最初のパターンと非常によく似た1つの置換でそれを得ることができます。ここでは、JavaScriptの例です:

s = s.replace(/(?:"([^"]+)"|(\S+))\s*/g, '$1$2&'); 

(あなたは、文字列の末尾に余分なアンパサンドを持っていることに注意してください)

+0

私は ''([^ "] +)" |(\ S +) 'をJavaで試してみましたが、これは文字列を見つけるのを見ました。 。 –

+0

@Paul - それは正しいです、私はあなたが新しい文字列に '結合 'しなければならないと言いました、それはそれほど悪くないです、それは? – Kobi

関連する問題