2017-10-03 10 views
0

ヨーロッパでは遅れており、その正規表現を実行することができません:-( ではなく、を引用符で囲んでいます。正規表現に囲まれず、文字で終わらないすべての出現箇所に一致する正規表現

INPUT:そうそう、この;入力;「引用符で」;することができます;「も非常に」;トリッキー;「私を信じて」;少年

それは引用符で囲まれたすべてのテキストを一致させるためにはとても簡単です

DEMO

しかし、私がしたいのは反対です。また、マッチを分割する必要があります。私が怒る前に、任意のアイデア

  1. そうそう、この
  2. 入力
  3. でき
  4. トリッキー
  5. 少年

:私は、次の試合を得るように?

thxを事前に入力してください!

'[^;]*'(?=;|$)|([^;]+)(?=;|$) 

説明:

'[^;]*'(?=;|$)  => finding words between `'` and ended with `;` or end of text, but not group it 
|     => or 
([^;]+)(?=;|$)  => finding other words ended with `;` or end of text, but grouped 

今あなたが欲しいものをキャッチするために$1を使用することができます

+0

は、あなたが最初に '区切り文字で文字列を分割ならば容易になるだろう。配列に'してから確認してくださいそれぞれの配列要素が '' '' – Gurman

+0

で始まったり終わったりしている場合や、見た目がサポートされている場合は正規表現 '(?<=^|;)[^ ';] +(?=; | $) LINK](https://regex101.com/r/D9NAzo/2) – Gurman

+0

'((?<=(^ |;)) – JDong

答えて

1

私はあなたがこのようなトリックを使用することができると思います。

[ Regex Demo ]

+0

'(?: '[^;] +' |([^;] +))に簡略化することができます(?=($ |;))) =; | $) ' – ctwheels

+0

なぜそれは単純化されていると思いますか?読みやすさや...? –

+0

コードの重複はありません。 '(?=; | $)'は2回あり、1つの場所でそれを削除すると、正規表現のメンテナンスが簡単になり、3文字少なくなります。私は、このソリューションが余分なステップを余計に必要とすることを認識していますが、コードの保守性がユーザーにとってより重要になる可能性があります。 *オプション*としてユーザーに提供する必要がありますので、回答の上に簡略化されたパターンを提案することに何の害もありません。 – ctwheels

関連する問題