Regex 什么';这个URL的正则表达式有什么问题
我正在写一个正则表达式,它应该匹配这种类型的URL http(s)://a.b.c.domain.company.com(:8000) 协议可以是http和https,端口是可选的 这是我写的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
$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都与您的正则表达式匹配。