php - 替换双引号内的内容,包括双引号

时间:2012-04-06 17:14:59

标签: php regex replace

所以我决定尝试制作一个文本突出显示系统。目前,我只是使用str_replace来替换一个单词(例如$rstr = str_replace("Console", "<c>Console</c>", $str,其中$str是输入字符串。

令我难过的是如何替换语音标记(“)和引号(')中的内容。例如,如果字符串”Console“变为Console.WriteLine("Words");,我将如何用{"Words"替换<sr>"Words"</sr> {1}}(<sr>在外部样式表中定义)?

我有一个虽然我可以使用正则表达式,但1.我不知道如何编写正则表达式,以及2.我不知道如何使用正则表达式str_replace

<小时/> 我的解决方案解决方案:

function hlStr($original)
{
    $rstr = explode('"', $original);
    return $rstr[0].'<sr>"'.$rstr[1].'"</sr>'.$rstr[2];
}

2 个答案:

答案 0 :(得分:7)

根据以下评论,我认为这对您来说是更好的资源:http://www.regular-expressions.info/

为了找到“任何可以去的地方”你应该使用正则表达式。这就是他们的目的。正则表达式可能类似于此问题中的答案:

How can I match a quote-delimited string with a regex?

然后你会像这样使用函数preg_replace()

$return_value = preg_replace('/"[^"]+"/', 'replacement text', $str)

无论如何离开这里:

用反斜杠逃避内容:

$rstr = str_replace("Console", "Console.WriteLine(\"$variable\");", $str)

如果您在字符串中使用变量,这将非常有用。如果它只是一个直接文本替换,请使用单引号:

$rstr = str_replace("Console", 'Console.WriteLine("Words");', $str)

单引号计算除了单引号之外的所有内容,只是一个字符。

答案 1 :(得分:0)

这是我的解决方案。用(“)符号分解整个字符串,然后对每一个字符串运行一个特定的代码。这个代码自动执行”item“之后的每一个值,这意味着,如果你这样做:hej”lol;它会改变to:hi <sr>" lol "</sr>;或者如果你这样做:hi“with”yo​​u;它将改为:hi <sr>" with "</sr> you;等等。

function wrapInside($text,$symbol)
    {
        $string = explode($symbol, $text);
        $i = 1;
        $QS = '';
        foreach( $queryString as $V )
        {
            ( $i == 1 ) ? ( $QS .= $V ) : ( $QS .= '<sr>"'.trim($V).'"</sr>' );
            ( $i == 1 ) ? ( $i = 0 ) : ( $i = 1 );
        }
        $queryString = trim($QS);
        return $queryString;
    }