2010-10-25 28 views
4

为了好玩,我决定做类似于降价的事情。凭借我过去对正则表达式的小体验,我知道他们有多么强大,所以他们将成为我需要的。PHP preg_replace将** xyz **改为<b>xyz</b>

所以,如果我有这样的字符串:

Hello **bold** world 

如何,我可以使用的preg_replace来转换到:

​​3210

我认为这样的事情?

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

在正则表达式中,您可能会完全按照您的要求进行操作,但请记住,标记等内容不应该使用正则表达式实现。 Joel Spolsky在Stack Overflow播客中谈到了这个问题。看看有限状态机。 – emurano 2010-10-25 21:56:19

+0

指向播客的链接:http://itc.conversationsnetwork.org/shows/detail4359.html – 2010-10-25 22:02:46

+0

@emurano FSM可以处理的语言是常规的;因此它们可以由正则表达式来处理。 – NullUserException 2010-10-25 22:27:25

回答

7

关闭:

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

谢谢,男人!正是我需要的! – Entity 2010-10-25 22:45:44

2

我相信这是一个PHP包渲染降价。您可以尝试使用已编写和测试的现有代码集,而不是自己编写代码。

1

嗯我想这可能是工作

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

你会发现所有的序列**something**,然后你替换与大胆的标记,它($1)捕获的第一组(在括号内发现的整个序列表达)。

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