Regex 什么';这个URL的正则表达式有什么问题

Regex 什么';这个URL的正则表达式有什么问题,regex,Regex,我正在写一个正则表达式,它应该匹配这种类型的URL http(s)://a.b.c.domain.company.com(:8000) 协议可以是http和https,端口是可选的 这是我写的 $reg = "^(http|https)(\://)([a-zA-Z0-9\-\.]){6,}(\:[0-9]*)?\/?" $url1 = "http://uat.upm.goal.services.ps.com" $url2 = "http://uat.upm.goal.services.ps.co

我正在写一个正则表达式,它应该匹配这种类型的URL

http(s)://a.b.c.domain.company.com(:8000)

协议可以是http和https,端口是可选的

这是我写的

$reg = "^(http|https)(\://)([a-zA-Z0-9\-\.]){6,}(\:[0-9]*)?\/?"
$url1 = "http://uat.upm.goal.services.ps.com"
$url2 = "http://uat.upm.goal.services.ps.com:9000/"
$url3 = "http://uat.upm.goal.services.ps.com:9000?name=foo"
$flag1 = $url1 -Match $reg
$flag2 = $url2 -Match $reg
$flag3 = $url3 -Match $reg
echo $flag1
echo $flag2
echo $flag3   
我希望$url1和$url2与正则表达式匹配。。。但是$url3应该无法匹配(因为它包含命令)。我希望URL以.com或.com:8000或.com:8000结尾/


我不希望在(可选)端口和/

后面有任何内容,因为在字母组后面缺少
+
。所以
([a-zA-Z0-9\-\.]){6}
应该是
([a-zA-Z0-9\-\.]+){6}
,所以至少有一个字符,可能还有更多

另外,
{6}
并没有达到您期望的效果(用6点匹配域),因为您编写它的方式。移除它,并允许任意数量的点分隔域部分,或将其更改为:

([a-zA-Z0-9\-]+\.){6}
请尝试
“^(http | https)(\:/)([a-zA-Z0-9\-\.]){6、}(\:[0-9]*)?\/”

对于没有查询部分的URL,请使用以下内容:
“^(http | https)(\:/)([a-zA-Z0-9\-\.]){6、}(\:[0-9]*)?\/?$”

$
表示行/字符串的结尾

我删除了结尾处的
^
,因为它是一个特殊的字符,表示行的开头

我将
{6}
更改为
{6,}
,这意味着组中必须至少有6个字符

我在awk中对此进行了测试,它符合:

awk='/^(http|https)(\:\/\/)([a-zA-Z0-9\-\.]){6,}(\:[0-9]*)?\/?$/'
echo "http://u.ucm.project.services.ps.com" | awk "$awk {print\$0}"
echo "https://z.ucm.project.services.ps.com:22400/" | awk "$awk {print\$0}"
echo "http://uat.upm.goal.services.ps.com:9000?name=foo" | awk "$awk {print\$0}"

正如你所希望的,只有前两场比赛。

但我有/?这意味着/最终是可选的。你提到的这个+会使它变成一个或多个。。。但是我想要特定的6次出现。这里使用
^
作为模式的分隔符。是的,我刚刚想到了这一点。我的回答还有一个错误。更新。由于
com
之后没有点,您可能应该将其更改为
([a-zA-Z0-9\-]+\){5}(com|org|net)
或类似的内容。为什么要在末尾添加
^
?我试图强制检查URL是否以.com或.com:8000或.com:8000/结尾,但您不能说.com:8000/?cmd=foo为什么要限制为
{6}
?我以为你想通过
.com
进行匹配。另外,我认为你需要摆脱前斜杠。我试过你的模式。你看它允许命令。。。但我不需要命令。例如,在下面的示例中,$url1和$url2应该匹配,但$url3不应该匹配“$reg=”^(http | https)(\:/)([a-zA-Z0-9\-\.]){6,}(\:[0-9]*)?\/“$url1=”“$url2=”“$url3=”“$flag1=$url1-匹配$reg$flag2=$url2-匹配$reg$flag3=$url3-匹配$reg echo$flag1回波$flag3`但所有3 URL都与您的正则表达式匹配。