两个标签之间的Php文本

时间:2014-08-06 22:11:04

标签: php regex tags

晚上好,

我对正则表达式及其在php中的使用存在问题。

我需要在更多标签之间转换文字。

例如,本文:

Prova prova <Ciao ciao> sto provando {ciao} sto ancora provando [ciao]

将被转变为

Prova prova <<i>Ciao ciao</i>> sto provando {<i>ciao</i>} sto ancora provando [<i>ciao</i>]

我需要一个在这个模式下在标签之间转换的函数: &LT;&GT; [] {}

我该怎么做?

谢谢,对不起我的英语。

1 个答案:

答案 0 :(得分:1)

您可以使用str_replacestrtr ...

执行此操作
$text = strtr($text, 
      array('<' => '<<i>', '{'  => '{<i>', '['  => '[<i>',
            '>' => '</i>>', '}' => '</i>}', ']' => '</i>]')
);

如果您正在考虑使用正则表达式,也许您希望使用preg_replace_callback()

$text = preg_replace_callback('~(?<=[<{[])[^]}>]*(?=[]}>])~', 
      function($m) { return '<i>' . $m[0] . '</i>'; }, $text);

解释

这使用lookarounds的组合。回调函数在找到的每个匹配结果周围插入标记。

(?<=        # look behind to see if there is:
  [<{[]     #   any character of: '<', '{', '['
)           # end of look-behind
[^]}>]*     # any character except: ']', '}', '>' (0 or more times)
(?=         # look ahead to see if there is:
  []}>]     #   any character of: ']', '}', '>'
)           # end of look-ahead

strtr demo | regex demo

相关问题