我写了一个正则表达式,它“适用于”我能想到的所有测试用例。 基本上任何匹配模式的URL:
/app.* AND没有长度为1-4的扩展名,应该重写。 我想出来了:
/app((?:\\/[\\w([^\\..]{1,4}\b)\\-]+)+)
问题是,这可以简化以达到同样的目的吗? 另外,我可以用。*之类的东西替换我对\ w的使用,我可能是错的,但我怀疑只要遇到一个带有奇怪字符的URL就会中断。
编辑1: 应匹配的示例网址:
/app AND /app/
/app/auth
/app/auth/fb
/app/auth/twitter
/app/groups
/app/conn/manage
/app/play
/app/play/migrate
/app/play/migrate/done
不匹配的示例网址:
/app/js/some.file.js
/app/js/jquery.js
/app/styles/default/rain.css
/app/styles/name/file.css
/app/tpl/index.tpl
/app/tpl/file.html
/app/tpl/some.other.tpl
感谢。
答案 0 :(得分:2)
我认为更好的方法是将您希望Web服务器的所有资产放在一个目录中。与/app/public
一样,您可以获得app/public/js
和app/public/html
等。这将使您没有边缘情况并且更容易处理URL。
无论如何,我认为下面的正则表达式回答了你问的问题:匹配任何东西,除非文件中有1到4个字符的扩展名。
^(\/(\w+))*\/?(\.\w{5,})?\??([^.]+)?$
http://rubular.com/r/4CQ4amccH5
^ //start of anchor
(
\/ //match forward slash
(\w+) //match any word character, match atleast once
)+ //match this group atleast once (this group captures /app/etc/etc)
\/? //match a forward slash, make it optional (to also capture /app/)
(\.\w{5,})? //match any word after a . with 5 characters or more, make it optional
\?? //match a ?, make the match optional
([^.]+)? //match anything not containing a . 1 or more times, make the match optional
$ //end of anchor
这仍然需要一些工作才能使它在Java中工作,主要是很多转义转义字符。
答案 1 :(得分:0)
你的正则表达式是:
/app(/\w+)*/?$
我认为你想要将一个url与单词字符匹配,这些单词字符可能以斜杠结尾但不是文件扩展名。