【问题标题】:Original image wordpress in regex正则表达式中的原始图像 wordpress
【发布时间】:2016-09-27 18:05:35
【问题描述】:

好的,我想使用 .htaccess 文件检测 wordpress 是否正在请求图像的原始版本。然后我会将请求发送到特定的 php 文件以对文件进行一些更改。

图片的文件名如下

/wp-content/uploads/2016/07/background.jpg
/wp-content/uploads/2016/07/background-1000x200.jpg
/wp-content/uploads/2016/07/background-1500x350.jpg
/wp-content/uploads/2016/07/background-1600x400.jpg
/wp-content/uploads/2016/07/background-1600x600.jpg

我想检测原始图像,不带尺寸参数。

我尝试过: (?<!-[0-9]{1,4}x[0-9]{1,4})\.(?:jpe?g|gif|png)$ 但由于某种原因它不起作用。谁能帮我解释一下为什么?

我正在尝试执行以下操作:

  • \.(?:jpe?g|gif|png)$ 在行尾查找 .jpg、.jpeg、.gif 或 .png
  • 然后我进行否定的向后查找,使其前面没有 -[numbers]x[numbers],其中数字应该可以是 0 到 9999 之间的任何值。

我认为这是因为我无法将量词置于负前瞻中,但我想不出另一种方法来实现这一点。

我不能保证文件名不会以数字结尾,因此仅检查数字是行不通的。我的图像尺寸也可能不是 4 位数,而是 3 位数,因此也无法进行检查。

提前感谢您,任何花时间阅读本文的人

【问题讨论】:

标签: regex wordpress .htaccess


【解决方案1】:

只有当它不包含您的解析模式时,您才可以匹配整个字符串。

^(?!.*-[0-9]{1,4}x[0-9]{1,4}).*\.(?:jpe?g|gif|png)$

regex demo

匹配:

  • ^ - 字符串开头
  • (?!.*-[0-9]{1,4}x[0-9]{1,4}) - 除了换行符 (.*) 之外的任何 0+ 字符后不应有 -,1 到 4 位,x,1 到 4 位
  • .* - 除换行符之外的任何 0+ 字符,尽可能多到
  • \.(?:jpe?g|gif|png) - 一个文字点,后跟 jpgjpeg 等。
  • $ - 字符串结束。

在必要时添加(...) 捕获组,以便在使用反向引用的替换中重新使用捕获的值。

【讨论】:

  • 非常感谢您的帮助。我可以看到为什么您的解决方案有效,但我仍然不确定为什么我的解决方案没有。我认为这是因为我不能在后视中使用量词,但显然你可以,因为你在你的解决方案中这样做了。
  • 你在 lookbehind 中使用了未知长度的量词,我在 lookahead 中使用它们。您可以在每个支持前瞻的正则表达式风格的前瞻中使用任何宽度的模式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-21
  • 2015-12-18
  • 2016-06-11
  • 2014-12-11
  • 2012-04-20
  • 1970-01-01
  • 2016-08-17
相关资源
最近更新 更多