Preg_match PHP——模式匹配


Preg_match PHP -- pattern matching

试图理解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正则表达式测试器