我似乎无法找出正则表达式来匹配格式为
的任何字符串**(anything that's not **)**
我试过在php中做这个
$str = "** hello world * hello **";
$str = preg_replace('/\*\*(([^\*][^\*]+))\*\*/s','<strong>$1</strong>',$str);
但没有更换字符串。
答案 0 :(得分:4)
您可以使用assertion ?!
与角色.
占位符配对:
= preg_replace('/\*\*(((?!\*\*).)+)\*\*/s',
这基本上意味着匹配任意数量的任何数字(.)+
,但.
永远不会占据\*\*
的位置
答案 1 :(得分:1)
您可以使用延迟匹配
\*\*(.+?)\*\*
# "find the shortest string between ** and **
或贪婪的
\*\*((?:[^*]|\*[^*])+)\*\*
# "find the string between ** and **,
# comprising of only non-*, or a * followed by a non-*"
答案 2 :(得分:1)
这应该有效:
$result = preg_replace(
'/\*\* # Match **
( # Match and capture...
(?: # the following...
(?!\*\*) # (unless there is a ** right ahead)
. # any character
)* # zero or more times
) # End of capturing group
\*\* # Match **
/sx',
'<strong>\1</strong>', $subject);
答案 3 :(得分:1)
preg_replace( '/\*\*(.*?)\*\*/', '<strong>$1</strong>', $str );
答案 4 :(得分:0)
尝试:
$str = "** hello world * hello **";
$str = preg_replace('/\*\*(.*)\*\*/s','<strong>$1</strong>',$str);