2011-12-08 116 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