匹配不包含特定字词

时间:2018-01-11 23:16:26

标签: regex

我需要一些正则表达式的帮助,因为它们不匹配这些网址:

/Common/Download.php?file=/path/to/file.pdf

而是匹配这些静态网址:

/path/to/file.pdf

我看了很多帖子(也在这个网站上),但似乎没有任何效果如预期的那样。

感谢您的帮助。

洛伦佐。

更新

很抱歉,如果这篇文章不完整。我发布了更多信息以获得更好的帮助。

我需要的正则表达式必须与Apache模块mod_rewrite(以及与IIS模块兼容的IIS的模块mod_rewrite(可能这不是正确的名称)一起使用(如我所知),如果可能的话)并且必须将匹配的静态网址(仅限第二种类型,如我的帖子)重定向到特定网页。

再次感谢。

洛伦佐。

2 个答案:

答案 0 :(得分:0)

在不了解您的编程语言和正则表达式解析器的情况下,我保持我的正则表达式非常通用,但是这样的事情会让你接近:

^/([A-Za-z0-9]+/)+[A-Za-z0-9]+\.[A-Za-z0-9]{3,4}$

这匹配以斜杠开头的字符串,一个或多个以斜杠分隔的目录,以及带有三个或四个字符文件扩展名的文件名结尾。

这意味着/path/to/some/really/buried/file.html也会匹配。

使用交互式正则表达式求值程序是快速编写和调试正则表达式的好方法,特别是如果您不熟悉它们。我真的很喜欢The Regex Coach

答案 1 :(得分:0)

另一种选择可能是在非捕获组中重复正斜杠小写字符模式并重复该操作。然后匹配文件扩展名.pdf

^(?:/[a-z]+){3}\.pdf$

<强>解释

  • 从字符串^
  • 的开头
  • 非捕获组(?:
  • 匹配一个或多个小写字符[a-z]+
  • 关闭非捕获组并匹配3次){3}
  • 匹配点\.pdf
  • 字符串$
  • 的结尾

或者重复该组2次,使用\w+

进行文件名

^(?:/[a-z]+){2}/\w+\.pdf$

如果您想匹配示例静态网址以及可能更长或更短的路径,例如/path/file.pdf/dir/path/to/file.pdf,您可以使用:

^(?:/\w+)+\.\w+$