Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正则表达式:URL正在写入任何不带扩展名的路径_Java_Regex_Url Rewriting - Fatal编程技术网

Java 正则表达式:URL正在写入任何不带扩展名的路径

Java 正则表达式:URL正在写入任何不带扩展名的路径,java,regex,url-rewriting,Java,Regex,Url Rewriting,我已经编写了一个正则表达式,它“适用于”我能想到的所有测试用例。 基本上任何与模式匹配的URL: /app.*且末尾没有长度为1-4的扩展,应重新写入。 我想到了: /app((?:\\/[\\w([^\\..]{1,4}\b)\\-]+)+) 问题是,这能简化成同样的事情吗? 另外,我是否可以将\w的用法替换为。*,我可能错了,但我怀疑一旦遇到带有奇怪字符的URL,它就会中断 编辑1: 应匹配的URL示例: /app AND /app/ /app/auth /app/auth/fb /app

我已经编写了一个正则表达式,它“适用于”我能想到的所有测试用例。 基本上任何与模式匹配的URL:

/app.*且末尾没有长度为1-4的扩展,应重新写入。 我想到了:

/app((?:\\/[\\w([^\\..]{1,4}\b)\\-]+)+)
问题是,这能简化成同样的事情吗? 另外,我是否可以将\w的用法替换为。*,我可能错了,但我怀疑一旦遇到带有奇怪字符的URL,它就会中断

编辑1: 应匹配的URL示例:

/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
不应匹配的URL示例:

/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

谢谢。

我认为更好的方法是将希望Web服务器处理的所有资产放在一个目录中。像
/app/public
,这样你就可以得到
app/public/js
app/public/html
等等。这将使你没有边缘案例,并且更容易处理URL

无论如何,我认为下面的正则表达式回答了您提出的问题:匹配任何内容,除非文件上有一个扩展名,扩展名为1-4个字符

^(\/(\w+))*\/?(\.\w{5,})?\??([^.]+)?$

这仍然需要一些工作才能在Java中工作,主要是大量转义字符。

您的正则表达式应该是:

/app(/\w+)*/?$

我假设您希望将url与可能以斜杠结尾但不是文件扩展名的单词字符相匹配。

请给出一些示例。这将使问题更加清楚
\w
将是[a-zA-Z_0-9]的缩写。您可以对非单词字符使用
\W
。是的,我知道关于\W和\W,我可能认为边缘大小写比其他任何字符都重要,但我认为我也应该匹配非字母数字字符。其中一些URL可能是根据用户提供的内容生成的,我可以去掉非字母数字,但URL中允许使用一些非字母*SSO要求URL不应包含扩展名,对吗?是的,URL末尾不应包含1到4个字符之间的扩展名。所以some.file.js不应该匹配,但是some.file.random是有效的,应该匹配谢谢,在一个月左右的时间里,我将能够进行重构,然后我将更改目录。
/app(/\w+)*/?$