我有两个带有模式的网址:
2。http://localhost:9001/flight/
我有一个网站过滤器,如果正则表达式匹配,它会重定向到相应的网站。我为上面的2个URL尝试了以下正则表达式模式:
HTTP://本地主机[^ /]的 / F [^飞行] / *
HTTP://本地主机[^ /]的 /飞行/ *
两个URL都被重定向到第一个站点,因为两个URL都与第一个正则表达式匹配。
我已经尝试了http?:// localhost [^ /] / [f] / 。*也用于第一个网址。我无法得到我错过的东西。我觉得这个正则表达式不应该接受除“f”之外的任何东西,但它也允许“飞行”。
请指出我所犯的错误,帮助我。
答案 0 :(得分:0)
第一个将被以下正则表达式捕获;
/^http:[\/]{2}localhost:9001\/f[^light]$/
另一个将被禁止,可以通过以下正则表达式找到
/^http:[\/]{2}localhost:9001\/flight\/$/
答案 1 :(得分:0)
保持简单:
.*/f(/[^/]*)?$
VS
.*/flight(/[^/]*)?$
在?
之前添加$
会使可选路径词可选的尾随斜杠。
答案 2 :(得分:0)
你的正则表达式有几个问题:1)p?
表示可选 p
(htt://
会匹配),2)[^/]
只会匹配您的网址中为:
,因为它只会捕获1个字符(并且您有一个端口号),3)[^light]
是一个否定的字符类,这意味着任何不是{{1}的字符},l
,i
,g
或h
。
因此,如果您只想捕获t
个网址,那么第一个网站最好use this regex:
localhost
this one代表第二个
http://localhost[^/]*/f/.*
另请注意,根据您使用正则表达式的位置,您的实际输入可能包含也可能不包含协议。
答案 3 :(得分:0)
这些应该适合你:
http[s]{0,1}:\/\/localhost:[0-9]{4}\/f\/
http[s]{0,1}:\/\/localhost:[0-9]{4}\/flight\/
您可以看到它有效here