所以我决定尝试制作一个文本突出显示系统。目前,我只是使用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];
}
答案 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”you;它将改为: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;
}