我想对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执行此操作?
答案 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>";
希望它有所帮助。