PHP preg_replace将**xyz**转换为<b>xyz</b>

5
我决定为了好玩做一些类似于Markdown的东西。过去我有一些使用正则表达式的经验,知道它们非常强大,所以这就是我需要的。
因此,如果我有这个字符串:
    Hello **bold** world

如何使用 preg_replace 将其转换为:
    Hello <b>bold</b> world

我认为你是这样想的吧?
    $input = "Hello **bold** world";
    $output = preg_replace("/(\*\*).*?(\*\*/)", "<b></b>", $input);

2
可能可以使用正则表达式来实现您所要求的功能,但请记住,像Markdown这样的东西不应该使用正则表达式来实现。Joel Spolsky在Stack Overflow播客中谈到了这个问题。可以研究一下有限状态机。 - emurano
播客链接:http://itc.conversationsnetwork.org/shows/detail4359.html - Jim
@emurano 可以被有限状态机处理的语言是正则的;因此它们可以被正则表达式处理。 - NullUserException
我猜想既然正则表达式基本上是动态生成有限状态机,那么我的观点就无效了 :) - emurano
4个回答

9

关闭:

$input = "Hello **bold** world";
$output = preg_replace("/\*\*(.*?)\*\*/", "<b>$1</b>", $input);

哇嘿!谢谢!! - Urs

2

我相信有一个PHP包可以渲染Markdown。与其自己动手,不如尝试使用已经编写和测试过的现有代码集。


1

嗯,我想这可能可行

$output = preg_replace('/\*\*(.*?)\*\*/', '<b>$1</b>', $input);

你需要找到所有的序列**something**,然后用粗体标签替换找到的整个序列,并在其内部($1)使用第一个捕获组(表达式中的括号)。


0
$output = preg_replace("/\*\*(.*?)\*\*/", "<b>$1</b>", $input);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接