2017-10-27 2 views
1

私のような文字列をマッチさせたい:正規表現マッチテキスト

The sentence is 'He said "Hello there"' 
The sentence is "He said 'Hello there'" 

をし、外側の単一引用符または二重引用符内の文である単一のキャプチャ(マッチ)を取り戻します。

^The sentence is (?:(?:'([^']*)')|(?:"([^"]*)"))$ 

上記の正規表現は、キャプチャされた2つのグループを返します.1つは空、もう1つは目的の文が含まれています。

^The sentence is (['"])(.*)\1$ 

第1グループとして引用符(一重引用符または二重引用符)を、第2グループとして引用符を返します。

Iは最初のグループの非捕捉、

^The sentence is (?:['"])(.*)\1$ 

を行う場合、私は捕捉基に後で参照を使用することはできません。 (\ 1はもちろん、一重引用符または二重引用符を参照していません)

"キャプチャ"が後で正規表現で参照できるが、キャプチャされた値が返されないグループを持つ方法はありますか試合のリストに?

私の(一見シンプルな)問題を解決するための他の方法です。

答えて

0

この1つは動作するようです:

(?:'|").*(?:'|") 

または

((?:'|").*(?:'|")) 

あなたがグループを必要とする場合。 *は貪欲数量詞であるので、あなたが引用符の種類が最後にあるものを知っている必要はありませんので、link

それは動作します:

はここでデモです。 *は可能な限り多くをとります。

+0

最初の例では、実際には何をキャプチャしません。 2番目の例では、外側の一重引用符または二重引用符を含む文を取得します。 (?: '| ")(?:' |") ' –

+0

私は、引用符も取り込みたいと思っていますが、質問に戻って確認しませんでした。私はそれが助けてうれしいです。 –

+0

最初の引用がシングルかダブルかはわかりませんが、不平衡文がマッチすることを意味します:文は '' abc 123''と ''彼は "さようなら" ' と最後の返信'文章。 このような文字列を不均衡な引用符とマッチさせないといいでしょう。 –

0

一重引用符で始まる引用符が一重引用符で終わるように、引用符が適切に一致していることを確認する必要があります。また、文字列の境界を示す同じシンボル(二重引用符または一重引用符)の場合、正規表現は引用符をバックスラッシュでエスケープすることができます。これを試してみてください:

"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*'

これらのサンプルは、この正規表現にマッチ:

​​

"dou\"ble 'quote"