从输入字符串

时间:2018-05-08 11:50:36

标签: php

使用以下规则定义一个将字符串转换为有效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>

任何帮助?

1 个答案:

答案 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/>

我的正则表达式使用否定字符类[^...],因为它们允许正则表达式引擎以更高的效率移动。捕获组允许您隔离包装的子字符串并在替换中应用新的包装。