使用以下规则定义一个将字符串转换为有效html的函数:
_C
必须替换为<br/>
**Hello World**
必须替换为<i>Hello World<i/>
__Hello World__
必须替换为<strong>Hello World<strong/>
我的尝试......
$str = "Hi my name is __Matteo__and, _C I'm **Italian**";
function replaceString($str){
$newStr = str_replace("__", " <strong> ", $str);
$newStr = str_replace("**", "<i>", $newStr);
$newStr = str_replace("_C", "<br/>", $newStr);
return "<p>" . $newStr . "<p/>";
}
我不知道如何关闭代码<i>
和<strong>
任何帮助?
答案 0 :(得分:1)
如果这是我的任务,我会为_C
使用非正则表达式str_replace。然后使用正则表达式打开/关闭标签的部分。
代码:(演示:https://3v4l.org/26oGk)
$str = "Hi my name is __Matteo__and, _C I'm **Italian**";
function replaceString($str){
$str = str_replace("_C", "<br/>", $str);
$str = preg_replace(['~__([^_]+)__~', '~\*\*([^*]+)\*\*~'], ['<strong>$1</strong>', '<i>$1</i>'], $str);
return "<p>" . $str . "<p/>";
}
echo replaceString($str);
输出:
<p>Hi my name is <strong>Matteo</strong>and, <br/> I'm <i>Italian</i><p/>
我的正则表达式使用否定字符类[^...]
,因为它们允许正则表达式引擎以更高的效率移动。捕获组允许您隔离包装的子字符串并在替换中应用新的包装。