【问题标题】:Replace spaces in URL after #替换 # 之后的 URL 中的空格
【发布时间】:2013-05-02 20:49:47
【问题描述】:

我有一个来自 Wordpress 的数据库转储,其中包含带有空格的 url,我需要从中删除空格。我认为这将是一项简单得多的任务。这是匹配坏href的表达式

(href\="http\:\/\/wfsu.org/blog-coastal-health\/\?page_id\=\d+\/\#)((\w+)\s(\w+))+\"

问题是尝试用破折号替换空格..

我将替换为$1$3-$4",它适用于任何包含 2 个单词但不适用于 3 个以上单词的内容。谁有解决办法?

【问题讨论】:

  • 您目前使用 2 个单词而不是 3 个以上单词的方法是什么?
  • 为什么不直接替换空格呢?将所有 \s 替换为 -
  • Trokka:使用名为 sublime edit 的文本编辑器,但我正在研究使用 sed Matheus:该文件是一个 6k 行的 sql 文件,如果我替换了所有空格,它会破坏很多东西:p

标签: regex url replace spaces


【解决方案1】:

我会考虑使用preg_replace_callback()。这将允许您使用正则表达式来获取您感兴趣的 URL 字符串,然后您可以将其传递给回调函数,您可以在其中轻松使用字符串操作将空格替换为破折号。

您的代码可能如下所示:

$original_string; // your original string holding your text content
$pattern = '~href="http://wfsu.org/blog-coastal-health/.*"~i';
$cleaned_string = preg_replace_callback(
    $pattern,
    function ($matches) {
        return str_replace(' ', '-', $matches[0]);
    },
    $original_string
);

这消除了尝试确定需要在正则表达式本身中替换多少模式片段的需要。相反,您捕获整个href 属性值并对其执行简单的str_replace()

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 2014-08-19
    • 2013-01-14
    相关资源
    最近更新 更多