正则表达式 get 字符串介于 :: 之间,没有任何空格


regular expression get string between :: without any whitespace

我在使用正则表达式时遇到问题。我正在编码微笑系统。并从带有正则表达式的字符串中获取微笑代码,例如 :laugh::haha: .我想在::之间获取字符串,除了字母字符之外没有任何内容。

<?php
$a="hello my dear :smile: ho r u?";
$a=preg_replace("/:([a-zA-Z]):/","<b>$1</b>",$a);
//or
$a=preg_replace("/:('w):/","<b>$1</b>",$a);
echo $a;
?>

这些正则表达式都不起作用。如何解决这个问题?

您必须允许与+量词进行一个或多个匹配:
这应该有效:

$a = preg_replace("/:([a-zA-Z]+):/","<b>$1</b>",$a);