2010-10-25 54 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);