正则表达式 - 部分网址

时间:2015-12-16 11:19:30

标签: regex

我觉得我非常接近,我正在为一个部分网址写一个正则表达式。

请注意:我的示例最多显示两个/但是它可以有其他或更多。示例/test/test/test.htm

它可以接受a-z 0-9 - 和。如果它有下面引用的文件扩展名之一。它不能以 - 或a开头/结尾。前后必须有一个数字或字符。目前我的正则表达式接受应拒绝的字符串

接受

/test/test.htm (this could be jpeg|jpg|gif|png|htm|html)
/test/test
/test/test-test.htm
/test/test-test
/test/test123.htm
/test/test123

应该被拒绝(但通过)

/test/test.
/test/.hhh
/tes  t
/tes_t
/tes"t
/tes’t
/-test (cannot start with any thing else other than letters/numbers

正则表达式:^\/.*?(\.(jpeg|jpg|gif|png|htm|html)|([^\.])[\w-]{1})$

3 个答案:

答案 0 :(得分:3)

这是我能找到的最完整的正则表达式。我已经向其他人添加了评论'正则表达式,因为他们在/test/test-(他们的正则表达式会接受)失败。

^\/[a-zA-Z0-9]+([-\/](?:[a-zA-Z0-9]+))*(\.(?:jpe?g|gif|png|html?))?$

请参阅here

Regex explanation

如果您还需要匹配后续的-(例如/test--test),则可以使用以下正则表达式,如here所示。

^\/[a-zA-Z0-9]+((?:-+|\/)(?:[a-zA-Z0-9]+))*(\.(?:jpe?g|gif|png|html?))?$

答案 1 :(得分:1)

可以优化:

^(\/[a-zA-Z0-9\d]+)+([a-zA-Z0-9-]*\.(jpeg|jpg|gif|png|htm|html))?$

Try it live here

  • 我们首先将/abd等文件夹的模式与\/[a-zA-Z0-9\d]+多次匹配,其中还包含文件名
  • 还允许文件名名称中包含-
  • 然后可选择匹配扩展名

答案 2 :(得分:1)

试试这个正则表达式:

^(?:\/[a-z0-9](?:[^\/ _"’\n.-]|\.(?=(?:jpe?g|gif|png|html?)$)|\-(?!$))+)+$

Regex live here.

解释

^(?: # from start \/[a-z0-9] # one slash and one letter or digit (?: # one of: [^\/ _"’\n.-] # characters not in this list | # OR \.(?=(?:jpe?g|gif|png|html?)$) # one dot with the condition # of being the extension dot # at the end | # OR \-(?!$) # one - not at the end )+ # at least one of them to many )+$ # as there could be /folder/folder # as many matches till the end

希望它有所帮助。