2011-10-29 4 views
0

が含まれている場合は停止:'#artists/(.*)/#'を、私は、この文字列にマッチさせたい:'/artists/alesana/wires-and-the-concept-of-breathing/'はどのように私はそれだけで'alesana'ない'alesana/wires-and-the-concept-of-breathing'一致していることを確認することができます。preg_match_allしかし、ワイルドカードは、私はこの正規表現持ってと仮定すると、スラッシュ

つまり、どうすれば私のreg expをスラッシュに合わせることができますか? 技術的にはartists/(.*)/(.*)の別のルーティングルールを作成するつもりですが、遅かれ早かれこの問題でこの問題を実行するつもりです。

答えて

2

?文字で正規表現を非貪欲にします。これは本質的に最短マッチを見つける:

/artists/(.*?)/ 

は続きを読む:Lazy quantification in regular expressions

+0

で正規表現とメタ文字についての詳細を読むことができます..私はそれは、単純な "ものになるだろう知っていました。もうこのミスをしないことを願っています。ありがとう! –

+0

喜んで助けてください:) –

0

は、あなたがこれを試してみますか? artists/[^/].+?/

0

ハンス・エンゲルは以下のようになり述べたように非欲張り探索を使用するよりも、別の解決策:

/artists/([^/]*)/ 

文字クラス[]内部^を使用して、コンテンツを否定します。したがって、[^/]はすべての文字に一致しますが、スラッシュです。

あなたがああhttp://www.regular-expressions.info/reference.html

+0

あなたは本当に非貪欲なものに賛成して貪欲な演算子を避けたいです。欲張りオペレータは、評価中にかなりのパフォーマンスを消費する傾向があります。 –

+0

多くの状況でこれは当てはまりませんが、ここではそうではありません。この場合に遅延量子を使用すると、必要なバックトラックのために実際には欲張りよりもはるかに多くの操作が行われます。 – Marcus

関連する問題