首页 > 解决方案 > 在 preg_replace 中处理字符 / - PHP

问题描述

我想替换字符串中所有出现的特定术语(或者说一个段落)。

这些术语可以是 Blue Restaurant Ocean/Blue Restaurant、Blue's Restaurant。

$inputext = "The name is Ocean/Blue Restaurant "; 
$term = "Ocean/Blue Restaurant";
$rule = "/". $term."/i";
$replacetext = "[X]";
$outputext = preg_replace($rule, $replacetext, $inputext);
echo $outputext,"\n";

期望的输出

 The name is [X]

当字符“/”在输入中时,它无法工作。

我的主要目标是替换段落中所有出现的短语。是否有使用 preg_replace 的通用方法?

谢谢您的帮助。

标签: phpregexpreg-replace

解决方案


使用preg-quote进行转义的工作示例

$inputext = "Those terms can be Blue Restaurant Ocean/Blue Restaurant, Blue's Restaurant."; 

// you put your phrases here, remember to escape
// double quote if you want to use it as phrase
$termList = [
    "Ocean Restaurant",
    "Ocean/Blue Restaurant",
    "Blue Restaurant",
    "Blue's Restaurant",
    "so called \"double quote\" probably",
];

$pattern = '';

$termsCount = count($termList);

for ($i=0; $i<$termsCount; $i++) {
    $item = '(' . preg_quote($termList[$i], '/') . ')';

    if ($i < $termsCount -1) {
        $item .= '|';
    }

    $pattern .= $item;

}

$rule = '/' . $pattern . '/i';
$replacetext = "[X]";
$outputext = preg_replace($rule, $replacetext, $inputext);
echo $outputext,"\n";

array_map使用and 的示例implode

$inputext = "Those terms can be Blue Restaurant Ocean/Blue Restaurant, Blue's Restaurant."; 

// you put your phrases here, remember to escape
// double quote if you want to use it as phrase
$termList = [
    "Ocean Restaurant",
    "Ocean/Blue Restaurant",
    "Blue Restaurant",
    "Blue's Restaurant",
    "so called \"double quote\" probably",
];

$esc = function(string $input) : string
{
    return '(' . preg_quote($input, '/') . ')';
};

$termEscapedList = array_map($esc, $termList);
$pattern = implode('|', $termEscapedList);

$rule = '/' . $pattern . '/i';
$replacetext = "[X]";
$outputext = preg_replace($rule, $replacetext, $inputext);
echo $outputext,"\n";

推荐阅读