Php 关于正则表达式:在任何情况下将整个模式放在括号中有用吗?

Php 关于正则表达式:在任何情况下将整个模式放在括号中有用吗?,php,regex,Php,Regex,假设你有这样一个模式: @[a-z]+\s[\d] (@[a-z]+\s[\d]) 有这样的东西有用吗: @[a-z]+\s[\d] (@[a-z]+\s[\d]) 在任何情况下?他们之间有什么区别吗?这是怎么回事?通常你把它放在双引号中…这个()用于捕获数据。如果您试图匹配“我的名字是John”,而不捕获: /My name is [A-Z][a-z]+/ 那么结果就是字符串: ("My name is John") 如果要从结果中单独捕获名称,则可以使用(),如下所示: /M

假设你有这样一个模式:

@[a-z]+\s[\d] 
(@[a-z]+\s[\d])
有这样的东西有用吗:

@[a-z]+\s[\d] 
(@[a-z]+\s[\d])

在任何情况下?他们之间有什么区别吗?这是怎么回事?

通常你把它放在双引号中…

这个
()
用于捕获数据。如果您试图匹配
“我的名字是John”
,而不捕获:

/My name is [A-Z][a-z]+/
那么结果就是字符串:

("My name is John")
如果要从结果中单独捕获名称,则可以使用
()
,如下所示:

/My name is ([A-Z][a-z]+)/
/My name is ([A-Z][a-z]+) ([A-Z][a-z]+)/
这将返回整个匹配项(按照惯例,始终将整个匹配项作为第一个结果项返回),并且还将返回捕获的名称,如下所示:

("My name is John", "John")
如果我们想在
“我的名字是John Doe”
中记录名字和姓氏,那么我们可以这样做:

/My name is ([A-Z][a-z]+)/
/My name is ([A-Z][a-z]+) ([A-Z][a-z]+)/
结果是:

("My name is John Doe", "John", "Doe")

所以,为了回答你的问题,这两种表达方式实际上没有区别。第一个将只匹配一个字符串,而第二个将匹配并捕获它(在这种情况下,您基本上只会得到两个相同的结果)。

'[a-Z0-9.+-]+@[a-Z0-9.-+\.[a-Z]{2,4}'或“[a-Z0-9.+-]+@[a-Z0-9.-+\.+\[a-Z]{2,4}”希望如此helps@IdsZay您可以编辑您的答案以包含评论中的信息,一般来说,圆括号用于分组和创建反向引用。但是如果这些正则表达式是独立的,那么它们之间就没有真正的区别。唯一的区别是第二个得到了一个backreference(\1)。有关更多信息,请参阅。@SverriMOlsen感谢您的努力。我想他们是一模一样的吧?我们可以说默认情况下所有正则表达式都在()中吗?(整个表情)