如何使用preg_replace regex将*转换为HTML

时间:2014-09-01 15:53:13

标签: php regex preg-replace

我的文章段落中包含这种标记:

text1 *text2* text3

我需要把它们变成

text1 <strong>text2</strong> text3

我试过这段代码

$pattern = '~\*(.*)\*~'; 
$replacement = '<strong>\1</strong>'; 
$str = preg_replace($pattern, $replacement, $str);

它没有识别第二个,关闭星号。收盘强势&#34; html标记仅出现在下一个(第三个)星号中,稍后会出现在同一文本中。

我错过了什么?

更新:Avinash的模式适用于此问题,但这是一个相关的模式

我使用相同的模式(两者中的第一个)用标签替换下划线。但是相同的段落包含了像<img src="/my_image.jpg" width="700" height="300">这样的语法的图像。如何避免这个正则表达式转向那些下划线? (宽度/高度数量不同,不是恒定的。)

E.g。来自这样的文字

Lorem ipsum dolor sit amet, <img src="/my_image.jpg" width="700" height="300">  adipiscing elit. _Fusce pharetra_ a dui nec interdum. 

我想得到这个

Lorem ipsum dolor sit amet, <img src="/my_image.jpg" width="700" height="300">  adipiscing elit. <em>Fusce pharetra</em> a dui nec interdum.

1 个答案:

答案 0 :(得分:1)

您需要在捕获组内存在的?之后添加量词*以进行尽可能短的匹配,

$pattern = '~\*(.*?)\*~'; 

OR

$pattern = '~\*[^*]*\*~';