2010-09-08 83 views
0

我有一種感覺,我可能會錯過一些非常基本的東西。反正繼承人的情景:preg_replace上另一個preg_replace的匹配

我使用的preg_replace到===inputA===inputB===轉換爲<a href="inputB">inputA</a>
這是我使用

$new = preg_replace('/===(.*?)===(.*?)===/', '<a href="$2">$1</a>', $old); 

它的做工精細還好,但我還需要進一步限制inputB所以其這樣

preg_replace('/[^\w]/', '', every Link or inputB); 

因此,基本上,第一個代碼,在那裏你看到$2那邊,我需要對執行操作210,以便它只包含\w,如您在第二個代碼中所見。所以,最後的結果應該是這樣的:
轉換===The link===link's page===<a href="linkspage">The link</a>

我不知道如何做到這一點,我該怎麼辦?

回答

2

雖然已經有一個公認的答案:這是什麼/e改性劑或preg_replace_callback()是:

echo preg_replace(
    '/===(.*?)===(.*?)===/e', 
    '"<a href=\"".preg_replace("/[^\w]/","","$2")."\">$1</a>"', 
    '===inputA===in^^putB==='); 

//Output: <a href="inputB">inputA</a> 

或者:

function _my_url_func($vars){ 
    return '<a href="'.strtoupper($vars[1]).'">'.$vars[2].'</a>'; 
} 

echo preg_replace_callback(
    '/===(.*?)===(.*?)===/', 
    '_my_url_func', 
    '===inputA===inputB==='); 

//Output: <a href="INPUTA">inputB</a> 
+0

很棒,這就是我正在尋找的!謝謝! – 2010-09-08 23:40:41

1

嘗試preg_match第一個將2個匹配變成變量,然後使用preg_replace()您想要進一步檢查的那個?

1

爲什麼不從第一個正則表達式(preg_match)中提取匹配,並將結果處理,然後將它們放回HTML表單中?

+1

我在想這是很好,但是這將是展示一些關於如何做到這一點的代碼是一個好主意。 – Christophe 2010-09-08 20:13:17

+0

做了一個preg_match_all,然後在循環中使用了str_replace,最後使用了一個preg_replace。但是我發佈了這個問題,因爲我想知道是否有辦法直接在「$ 2」上執行操作。無論如何,謝謝:) – 2010-09-08 21:55:35