什么(?:做一个正则表达式(What does (?: do in a regular expres

2019-08-05 10:45发布

我所遇到的正则表达式,我不完全理解 - 有人可以帮助我在它破译:

^home(?:\/|\/index\.asp)?(?:\?.+)?$

它是在URL匹配中使用和上述的例子下面的网址匹配:

home
home/
home/?a
home/?a=1
home/index.asp
home/index.asp?a
home/index.asp?a=1

这在我看来,括号内的问号(?:不要做任何人可以告诉我。

使用正则表达式的版本与传统ASP提供的一个,如果这有助于在所有正在运行在服务器上。

Answer 1:

(?:)创建一个非捕获组 。 这组东西放在一起,而无需创建一个反向引用。

反向引用是可以参考的表达或可能更换的部分(通常说\1$1等-这取决于味)。 您也可以通常在编程语言使用正则表达式时,每场比赛都能提取出来之后。 使用的唯一原因(?:)是避免创建一个新的反向引用,这避免了增加的组号,并保存(的通常可忽略不计的量)存储器



Answer 2:

这是一个非捕获组,其本质是一样的使用(...)但内容不保留(不作为一个反向引用)。

如果你正在做这样的事情: (abc)(?:123)(def)你会得到abc$1def$2 ,但123将只匹配。



Answer 3:

它真的很容易每括号将在内存中创建一个变量,所以你可以使用括号值之后所以不把它保存在内存中只是把? 在这样的括号(?:),然后填写剩下的,因为你需要。 就是这样,没有别的



文章来源: What does (?: do in a regular expression