【问题标题】:How to find URLs that starts with "/" and contain "php"?如何查找以“/”开头并包含“php”的 URL?
【发布时间】:2019-10-15 13:06:54
【问题描述】:

我有一个 95MB 的 XML 内容文件,它从旧的 CMS(通过 Wordpress 的 Drupal)转移到新的 CMS(Squarespace)。

Squarespace 导入过程不断中断,似乎归结为尝试在新服务器中执行 PHP 的链接。

例如: <img src="/generate-image.php">

在导入过程中,新的 CMS 将其识别为内部链接并尝试执行该 URL 以导入内容,将其视为攻击或代码注入尝试并关闭该过程。

所以我想要一种方法来查找以“/”开头并包含“php”的 URL,以便我可以删除它们。

我应该清楚我只想识别内部链接而不是指向其他网站的外部链接。

这可以通过正则表达式实现吗?如果我可以将 Regex 语句插入 Atom & Find/Replace,我真的很想避免编写脚本来执行此操作。

【问题讨论】:

  • 尝试使用否定类,例如:\/[^\s"'><]+\.php
  • @bobblebubble - "\/[^\s"'><]+\.php 有效。我需要在开头添加",所以它只能找到本地 URL。如果您想将此作为答案,我很乐意接受。

标签: regex xml atom-editor regex-negation regex-lookarounds


【解决方案1】:

使用negated class 来做一些简单的正则表达式怎么样。

"\/[^\s"'><]+\.php
  • [^\s"'&gt;&lt;] 匹配除空格、引号、大号/小号
  • 之外的任何字符
  • 如果需要,在php 之后添加word boundary \b

Here is the demo at regex101 comparing internal php links to external php links

【讨论】:

    【解决方案2】:

    是的,这可以通过正则表达式实现。试试这个:

    (\/*)[\w.]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+\b.php\b
    

    它将匹配有效 URL 的所有可能字符。

    【讨论】:

    • 几乎!这会产生误报,例如以 http:// 开头的 url。我试图改变它,所以前两个字符必须是"/,但我的正则表达式远没有你的好。
    • 好的试试看:(\/\/)[\w.]+(?:\.[\w\.-]+)+[\w\-\._~:/ ?#[]@!\$&'()*\+,;=.]+\b.php\b
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多