我正在尝试理解正则表达式的工作原理。我已经逐渐了解它的一些内容。然而,我并没有完全理解这个正则表达式。它基本上是一个针对完全合格域名的正则表达式,但是要求结尾不能是.arpa
。
(?=^.{4,253}$)(^([a-zA-Z0-9]{1,63}\.)+[a-zA-Z]{2,63}[^.arpa]$)
https://regex101.com/r/hU6tP0/3
这个正则表达式不匹配 google.uk
。如果我将其更改为:
(?=^.{4,253}$)(^([a-zA-Z0-9]{1,63}\.)+[a-zA-Z]{1,63}[^.arpa]$)
它再次起作用了。
但是这个也可以正常工作
(?=^.{4,253}$)(^([a-zA-Z0-9]{1,63}\.)+[a-zA-Z]{2,63}$)
以下是我对以下内容的思考过程:
这里是我的思维过程
?=^.{4,253}$)(^([a-zA-Z0-9]{1,63}\.)+[a-zA-Z]{2,63}[^.arpa]$)
我理解为这样。
(?=
正向先行断言(有人能解释一下这到底是什么意思吗?)据我理解,它只是意味着字符串需要与正则表达式匹配。
^.{4,253}$)
匹配所有字符,但长度必须介于4到253个字符之间。
(^([a-zA-Z0-9]{1,63}\.)
开始一个捕捉组,并在其中创建另一个捕捉组。这个捕捉组表示每个非特殊字符可以重复1到63次,或直到写入.
为止。
+
先前的捕获组可以无限重复,但必须以“
.
”结尾。这样才能启动下一个捕获组。[a-zA-Z]{2,63}
然后,您可以任意多次使用大写字母A到Z进行书写,但是它必须介于2到63之间。
[^.arpa]$)
最后一个字符不能是
.arpa
。有人能告诉我哪里出了问题吗?