带URL的正则表达式 - 语法

时间:2012-01-26 12:05:15

标签: regex

我们使用的专有跟踪系统需要使用正则表达式在我们指定的网址上加载第三方脚本。

我想查看我们正在使用的正则表达式的语法,看看它是否正确。

匹配以下网址

/products/18/indoor-posters

我们正在使用此规则:

.*\/products\/18\/indoor-posters.*

这看起来不错吗?此外,如果URL上有查询参数,它仍然可以工作吗? e.g。

/products/18/indoor-posters?someParam=someValue

还有另一个匹配的网址:

/products

这个规则是:

.*\/products

这会正确匹配吗?

1 个答案:

答案 0 :(得分:0)

嗯,“正确”是一个相对术语。通常,.*不是一个好主意,因为它匹配任何东西,甚至没有。因此,虽然这些正则表达式都将匹配您的示例字符串,但它们也会匹配得更多。问题是:你在使用什么是正则表达式

如果你只想检查这些子串是否存在于字符串中的任何位置,那么它们就可以了(但是你不需要正则表达式,只需检查子串)。

如果你想以某种方式检查它是否是有效的URL,那么不,正则表达式不合适,因为它们也匹配foo-bar!$%(§$§$/products/18/indoor-postersssssss)(/$%/§($/

如果你可以确定你总是得到一个正确的URL作为输入,只是想检查它们是否与你的模式匹配,那么我建议

^.*\/products$

匹配以/products

结尾的任何网址
^.*\/products\/18\/indoor-posters(?:\?[\w-]+=[\w-]+)?$

将以/products/18/indoor-posters结尾的网址与末尾的可选?name=value位匹配,假设只有字母数字字符对namevalue合法。