晚上好,
我对正则表达式及其在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; [] {}
我该怎么做?
谢谢,对不起我的英语。
答案 0 :(得分:1)
您可以使用str_replace
或strtr
...
$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)