在#之后替换URL中的空格

时间:2013-05-02 20:49:47

标签: regex url replace spaces

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

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

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

我替换为$1$3-$4",对于任何有2个单词但没有3个单词的单词都可以正常工作。有人有任何解决方案吗?

1 个答案:

答案 0 :(得分:0)

我会考虑使用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()