2011-12-08 113 views
0

試圖瞭解preg_match,努力瞭解如何編寫以及如何訪問它匹配的內容。例如:Preg_match PHP - 模式匹配

我有每一個電影名稱是在format--

影片名稱(YEAR)

例如愛麗絲夢遊仙境(2010)

我希望能夠將電影標題從字符串中獲取到不同的變量中。

幾部電影有括號一年之外 - 如,電影(有其中的一個)(2008)

我遍歷字符串數組以及 - 所以我基本上需要使用preg_match來得到\([0-9]{4}\)$(是$行結尾的標記?),然後是沒有那一年的字符串的其餘部分以及兩個變量。

任何人都可以幫忙嗎?

編輯:呵呵。我發誓我輸入\。當我鍵入\(它進入(因爲我沒有雙重逃脫),無論如何,非常感謝你們!你鏈接它的網站也很棒(幫助解決數組問題,我沒有意識到它保持全字符串爲0好吧)

+1

看來你幾乎就在那裏。但是,你到底有什麼問題?你需要什麼幫助? – pgl

+0

我想我真的不明白如何跳過所有在開始的正則表達式的條款 – Paul

+0

那麼,你有用你使用的正則表達式 - 唯一的區別是,你需要逃避()s 。即:\([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) 

你在你的問題使用下面的正則表達式建議。 $對於行尾INFACT的標記,然而,)是在正則表達式的特殊字符需要被削減的工作:

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

或通過使用\d任何十進制數:

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

這將使子組1包含年份。

0

這裏有一個在線的正則表達式測試儀,學習正則表達式和測試他們時,這是非常有用的:HiFi Regex Tester