正则表达式在 :: 之间获取字符串,没有任何空格

regular expression get string between :: without any whitespace

我在使用正则表达式时遇到了问题。我正在编码微笑 system.And 使用正则表达式从字符串中获取微笑代码,例如 :laugh::haha:。 我想在 :: 之间获取字符串,除了字母字符外什么都没有。

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

None 这些正则表达式有效。我该如何解决这个问题?

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

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