2011-12-08 21 views
0

preg_matchを理解しようとすると、書き方を理解するのに苦労し、それが一致したものにアクセスする方法が分かりません。たとえば:Preg_match PHP - パターンマッチング

私が持っているすべての1つのムービー名はformat--

MOVIE名(YEAR)

例えばであります不思議の国のアリス(2010)

私は映画のタイトルを文字列から別の変数に取り込みたいと思っています。

いくつかの映画は今年の外側に括弧を持っている - 映画は、(これらの一つを有する)、のように(2008)

私は同様に、文字列の配列を反復処理しています - 私は基本的に必要preg_matchを使用して\([0-9]{4}\)$$の行末?)にし、その年のない残りの文字列と2つの変数を使用します。

誰も助けてもらえますか?

EDIT:Huh。私は\をタイプしたことを誓う。とにかく、大変ありがとうございました!またリンクしたサイトも素晴らしいです(配列の問題を助けましたが、私は0で完全な文字列を保持していたことに気づいていませんでした。 。)だけでなく、あなたのパターンは

+1

あなたはほとんどそこにいるようです。あなたは正確に何を持っているのですか?あなたは何を正確に援助したいですか? – pgl

+0

正規表現の言葉の意味では、始めにすべてをスキップする方法を実際に理解していないと思います。 – Paul

+0

あなたが使用した正規表現を使用しています。唯一の違いは、()をエスケープする必要があることです。すなわち:\([0-9] {4} \)$は、映画タイトルの終わりの(nnnn)年と一致しなければなりません。 – pgl

答えて

3

でもあれば:SOMETHING +(YEAR)、その後、あなたの正規表現は、このようにする必要があります:

#^(.+)\((\d{4})\)$# 

説明:

# -> pattern delimiter 
^ -> beginning of string 
(.+) -> any character "." once or more "+" 
\(-> escape parenthesis character 
\d{4} -> four digits 
\) -> escape parenthesis character 
$ -> end of string 

Example

1

は、これらの線のパターンを探して:

([0-9]{4})$ 

が行末に年一致させる:

Alice in Wonderland (2010) 
The movie (Has One of These) (2008) 

あなたは次の正規表現を使用するには、あなたの質問で提案されています。

\(([0-9]{4})\)$ 
^  ^^ both brackets have been slashed to match them literally 
    '- subgroup parenthesis. 

または任意の10進数のため\dを使用して::$は、行の終わりのためのInfactはマーカーである、しかし、)は仕事に削減する必要があり、正規表現での特殊文字である

\((\d{4})\)$ 

これにより、サブグループ1に年が含まれます。

0

ために、次を使用することができます正規表現を学習し、それらをテストするとき、それは非常に便利です:HiFi Regex Tester