2016-05-13 9 views
1

これは簡単な質問のように見えるだろうが、私は(私が思う)貪欲に苦しんでいる、と私は明白な例を見つけることができません。次の文字列が与えられシンプルPCRE正規表現

text/html; text/xml; text/json 

「最初のサブタイプ」(上記の例では「html」)を取得するにはどうすればよいですか?

は、私はこのような組み合わせのすべての種類を試してみた:

(.*)\/(.*)[ |;] 

及び第二の変数を取得しようとしています。

Iは、(それらの間の可能な空白で)文字列は常にフォーム

aaa/bbb 

における少なくとも1つの文字列を持ち、それはそれであってもよいか、あるいはそれはセミコロンが続いてもよいことを知っていますより多くのデータ(私は無視することができます - 私は最初のサブタイプが必要です)。だから、可能なオプションは、このようなことができます:

text/html 
text/html; text/xml 
text/html ; text/xml  ; application/json 
私はそれが最初のスラッシュを探して、その後、空白またはセミコロンかのどちらかの端に、その後のすべてを取ってと同じくらい簡単だった期待していた

文字列(これは私の正規表現がやっていると思っていたものですが)でも、正規表現では十分に熟練していません。

明確にするため

それは/が物事を妨げる場合に役立ちます、これは、PCRE互換の正規表現にする必要がある...

+0

'\/[;]' - 怠惰なマッチングを使用します(*。?)(*。?)。または、 '[^ \ /] + \ /(\ S +)'(どちらも 'preg_match'をPHP用に使用しています) –

答えて

0

の操作を行います。

^[^\/]+\/([^\s;]+) 

\1は、あなたがしたい最初のサブタイプです。

Demo

+0

' [^ \ s] 'は' \ S'です。 – kennytm

+0

@kennytmが編集しました。その筋肉の記憶は私が推測します:) – heemayl

+0

Hmmこの正規表現は 'text/html;'と '' html; "'と一致します。 '[^ \ s;]'が必要なようです:| – kennytm

関連する問題