我的文章段落中包含这种标记:
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.
答案 0 :(得分:1)
您需要在捕获组内存在的?
之后添加量词*
以进行尽可能短的匹配,
$pattern = '~\*(.*?)\*~';
OR
$pattern = '~\*[^*]*\*~';