正则表达式中括号的作用是什么?

4
我不理解正则表达式中的()。
例如,这些行之间有什么区别:
"/hello/"
"/(hello)/"
3个回答

6

()提供了一种捕获匹配和分组的方法,请查看这里获取更详细的描述。


1
通过将其包装在(和)中,您可以捕获它并作为一个整体处理。假设我们有以下文本:

hellohello hello!

如果我想找到两个“hello”单词,我可以这样做:

/hellohello/

或者,我可以这样做:

/(hello){2}/

那么上面的例子会得到相同的结果吗? - ajsie
寻找“hello”两次,是的。如果你想要,你可以手动输入两次,但是想象一下类似/(hello){50}/这样的东西。然而这只是一个非常有限的演示。 - Sampson
很好的例子..我为此给了你一个赞:) 请问您能解释一下以下代码中的这两个括号()吗?我无法理解它:'/<a([^>]+)>(.*?)</a>/i' - ajsie
这是一个反向引用。通常,它们用于存储表达式的某些部分以供以后使用。您可以查看以下问题,了解反向引用的示例:http://stackoverflow.com/questions/1695427/php-regular-expression-replace - Sampson

1

根据您所编写的内容,这两个示例之间实际上没有区别。但是括号允许您对该组字符应用后置逻辑(例如,正如另一位发帖者所举的例子,{2}之后会说明字符串“hello”连续输入两次而没有任何其他字符在中间 - hellohello。括号还允许您使用“或”语句 - “/(hello|goodbye)/”将匹配“hello”或“goodbye”中的任意一个。

然而,它们最强大的用途是从字符串中提取数据,而不仅仅是匹配它,它可以让您从字符串中提取数据并对其进行操作。

例如,在PHP中,如果您执行以下操作:

preg_replace( "/hello (.+)/i", "hello how are you?", $holder );`

那么 $holder[1] 将包含“hello ”之后的所有文本,这种情况下是“how are you?”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接