2014-09-18 20 views
-2

我正在研究這個正則表達式,我在preg_replace中使用這個正則表達式來圍繞它添加divs/divs圍繞文本的周圍*。它現在使用兩個* s。這將是一個肯定的方式只有一個*正則表達式使用一個*而不是兩個

當前

<?php 

$errors = 1; 

$arr['ERR'] = ''; 
$arr['ERR'] .= '*<i>Error 1</i>*'; 
$arr['ERR'] .= '*<i>Error 2</i>*'; 
$arr['ERR'] .= '*<i>Error 3</i>*'; 
$arr['ERR'] .= '*<i>Error 4</i>*'; 
$arr['ERR'] .= '*<i>Error 5</i>*'; 
$arr['TOF'] = 'Success'; 

$arr = preg_replace('#\*(.+?)\*#', '<div>$1</div>', $arr); 

print_r($arr); 
// output 


array (
    [ERR] => <div><i>Error 1</i></div><div><i>Error 2</i></div><div><i>Error 3</i></div><div><i>Error 4</i></div><div><i>Error 5</i></div> 
    [TOF] => Success 
) 



?> 

試圖

$arr['ERR'] = ''; 
$arr['ERR'] .= '*<i>Error 1</i>'; 
$arr['ERR'] .= '*<i>Error 2</i>'; 
$arr['ERR'] .= '*<i>Error 3</i>'; 
$arr['ERR'] .= '*<i>Error 4</i>'; 
$arr['ERR'] .= '*<i>Error 5</i>'; 
$arr['TOF'] = 'Success'; 

$arr = preg_replace('#\*(.+?)#', '<div>$1</div>', $arr); 

//just one * but get the same results as above. 

怎麼能正則表達式來完成只使用一個*

+1

那麼'* 錯誤1'?如果你正在嘗試做這樣的事情,你不應該寫一個有一些檢查/驗證的解析器嗎? IE瀏覽器。簡單的RegEx像這樣*假設**沒有**錯誤*。 – tenub 2014-09-18 16:24:45

回答

1

你可以使用這個正則表達式:

\*(.+?)(?![^*]) 

該前瞻斷言該比賽在另一個明星之前或在比賽結束時。

這是regex demo

+0

工程,但並不全部取代。不,不會有任何<*/>,因爲這些消息是硬編碼的。我以*開頭,表示它們是錯誤消息。 – jmenezes 2014-09-18 16:28:00

+0

不是另一顆明星。之後可能不會有另一顆星星。這樣'* 錯誤1 =

Error 1
'或'* 錯誤1 * 錯誤2 =
Error 1
Error 2
' – jmenezes 2014-09-18 16:40:09

+0

確定。感謝您的幫助。我是否喜歡這樣的'$ arr = preg_replace('#\ *(。+?)(?![^ *])#','

$1
',$ arr);'或是否需要'/ g'有像你的演示? – jmenezes 2014-09-18 16:50:06

相關問題