我觉得我非常接近,我正在为一个部分网址写一个正则表达式。
请注意:我的示例最多显示两个/但是它可以有其他或更多。示例/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})$
答案 0 :(得分:3)
这是我能找到的最完整的正则表达式。我已经向其他人添加了评论'正则表达式,因为他们在/test/test-
(他们的正则表达式会接受)失败。
^\/[a-zA-Z0-9]+([-\/](?:[a-zA-Z0-9]+))*(\.(?:jpe?g|gif|png|html?))?$
请参阅here。
如果您还需要匹配后续的-
(例如/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))?$
/abd
等文件夹的模式与\/[a-zA-Z0-9\d]+
多次匹配,其中还包含文件名-
答案 2 :(得分:1)
试试这个正则表达式:
^(?:\/[a-z0-9](?:[^\/ _"’\n.-]|\.(?=(?:jpe?g|gif|png|html?)$)|\-(?!$))+)+$
解释
^(?: # 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
希望它有所帮助。