试图理解preg_match,努力理解如何编写和如何访问它所匹配的内容。例如:
我所有的电影名字都是——
电影名称(年份)
。《爱丽丝梦游仙境》(2010)
我希望能够从字符串中获得电影标题的不同变量。
一些电影在年份之外有括号——比如,the movie (Has One of These) (2008)
我也在迭代字符串数组-所以我基本上需要使用preg_match来获得'([0-9]{4}')$
($
是行结束的标记吗?),然后在两个变量中不包含该年份的字符串的其余部分。
有谁能帮忙吗?
编辑:嗯。我发誓我打的是'。当我输入'(时,它变成了,因为我没有双转义。无论如何,非常感谢大家!你链接的网站也很棒(帮助解决数组问题,我没有意识到它也保持完整字符串为0)。
如果你的模式是: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
示例查找这些行中的模式:
Alice in Wonderland (2010)
The movie (Has One of These) (2008)
您在问题中建议使用以下正则表达式:
([0-9]{4})$
匹配行尾的年份。$
实际上是行结束的标记,然而,)
是正则表达式中的一个特殊字符,需要将其削减才能工作:
'(([0-9]{4})')$
^ ^^ both brackets have been slashed to match them literally
'- subgroup parenthesis.
或对任意十进制数使用'd
:
'(('d{4})')$
这将使子组1包含年份。
这是regex
制作的链接之一
十进制数
也可以使用下列格式'(('d{4})')$
这里有一个在线正则表达式测试器,它在学习正则表达式和测试它们时非常有用:HiFi正则表达式测试器