2011-06-27 27 views
3

年なしのパスで最後のフォルダをキャプチャしたいと思います。この文字列のパスについては、私は現在の正規表現がキャプチャしている 'Movies \ Millers Crossing'ではなく 'Millers Crossing'が必要です。PHP正規表現

G:ミラーズ・クロッシング\ \作品[1990]

preg_match('/\\\\(.*)\[\d{4}\]$/i', $this->parentDirPath, $title); 

答えて

5

複雑な表現ではなく、basename[docs]substr[docs]はどうですか?

$title = substr(basename($this->parentDirPath), 0, -6); 

これは常に文字列の末尾にフォーマット[xxxx]年があることを前提としています。

(そして、それはあまりにもの* nixの上の作品;))

更新:あなたはまだフォルダを取得するためにbasenameを使用して、正規表現に適用することができます:それは見え

$folder = basename($this->parentDirPath); 
preg_match('#^(.*?)(?:\[\d{4}\])?$#', $str, $match); 
$title = $match[1]; 
+0

常にその形式の文字列が存在することはありません。] –

+0

@aLk:それでは、どのように、その後動作するようにあなたの表現を意図しなかったことが唯一の一致だろうか?そのような年があれば。 –

+0

最終的にはこれは次のようになります([\ d {4} \] $)|(dvdrip $)|(... $)今のところ、最初のスラッシュを正規表現でスキップする方法を知りたいだけでしたしかし、私はちょうどbasenameと正規表現を使用する必要があるように見えます。 –

1

ではなく.、あなたが一致している任意の文字が、\で任意の文字を一致させる、基本的に

preg_match('/\\\\([^\\]*)\[\d{4}\]$/i', $this->parentDirPath, $title); 

試してみてください。

0

をあなたのようにこのようなものが欲しいです:

/([^\\])+\s\[\d{4}\]$/ 

これは私が少なくとも一緒に行くものです。文字列の最後のバックスラッシュの後に来るものだけを含める必要があり、ムービータイトルは最初のキャプチャグループに含まれます。

0

単純なアプローチ:

([^\\]*)\s?\[\d{4}\]$ 

私の代わりに、単一の\\\\\\例えば(あなたの問題は、「二重のバックスラッシュ」など、あなたと一緒にもあると考えています。また、文字にあなたが含まれるようにクラスを使用して、生活を楽にすることができます。 。キャレット(^)でそれを付けることによってたくない