PHP preg_replace所有文本更改

时间:2016-12-04 07:25:21

标签: php preg-replace

我想对html进行一些更改,但我必须遵循一定的规则。

我有这样的源代码;

A beautiful sentence http://www.google.com/test, You can reach here http://www.google.com/test-mi or http://www.google.com/test/aliveli

我需要将其转换为以下内容;

A beautiful sentence http://test.google.com/, You can reach here http://www.google.com/test-mi or http://test.google.com/aliveli

我尝试使用str_replace;

$html = str_replace('://www.google.com/test','://test.google.com');

当我像这样使用它时,我得到的结果不正确;

A beautiful sentence http://test.google.com/, You can reach here http://test.google.com/-mi or http://test.google.com/aliveli

错误的替换: {{3}}

如何使用preg_replace执行此操作?

2 个答案:

答案 0 :(得分:0)

如果句子是您问题中的唯一案例,则无需开始挣扎preg_replace

只需将您的str_replace()功能调用更改为以下内容(,搜索字符串部分末尾带有','):

$html = str_replace('://www.google.com/test,','://test.google.com/,');

这匹配首次出现的所需搜索参数,对于目标句子中的最后一个,添加此项(注意末尾的'/'):

$html = str_replace('://www.google.com/test/','://test.google.com/');

更新

使用这两个:

$targetStr = preg_replace("/:\/\/www.google.com\/test[\s\/]/", "://test.google.com/", $targetStr);

除了最后用逗号表示的所有内容之外,它会匹配。对于那些,使用你可以使用以下:

$targetStr = preg_replace("/:\/\/www.google.com\/test,/", "://test.google.com/,", $targetStr);

答案 1 :(得分:0)

您似乎正在将子目录test替换为子域。你的情况似乎太复杂了。但是我已经尽力应用一些可靠的逻辑或者可能不是,除非你的字符串保持相同的结构。但你可以试试这段代码:

$html = "A beautiful sentence http://www.google.com/test, You can reach here http://www.google.com/test-mi or http://www.google.com/test/aliveli";

function set_subdomain_string($html, $subdomain_word) {
    $html = explode(' ', $html);
    foreach($html as &$value) {
        $parse_html = parse_url($value);
        if(count($parse_html) > 1) {
            $path = preg_replace('/[^0-9a-zA-Z\/-_]/', '', $parse_html['path']);
            preg_match('/[^0-9a-zA-Z\/-_]/', $parse_html['path'], $match);
            if(preg_match_all('/(test$|test\/)/', $path)) {
                $path = preg_replace('/(test$|test\/)/', '', $path);
                $host = preg_replace('/www/', 'test', $parse_html['host']);
                $parse_html['host'] = $host;
                if(!empty($match)) {
                    $parse_html['path'] = $path . $match[0];
                } else {
                    $parse_html['path'] = $path;
                }

                unset($parse_html['scheme']);

                $url_string = "http://" . implode('', $parse_html);
                $value = $url_string;
            }
        }
        unset($value);
    }

    $html = implode(' ', $html);

    return $html;
}

echo "<p>{$html}</p>";
$modified_html = set_subdomain_string($html, 'test');
echo "<p>{$modified_html}</p>";

希望它有所帮助。