2012-11-18 71 views
0

我在寫一些代碼來輸出HTML鏈接,它弄成這個樣子:哪個PHP regexp方法更好用?

$search = array('/{LINK([^.]*)\.([^.]*)\.([^}]*)}/', '/{ILINK([^.]*)\.([^.]*)\.([^}]*)}/'); 
$replace = array('<a href="$1.php?$2">$3</a>', '<a class="ilink" href="$1.php?$2">$3</a>'); 
$foo = preg_replace($search, $replace, $foo); 

但後來我看了所有的重複,我試圖找到一個「更好」的方法。所以我結束了這個:

$foo = preg_replace_callback ('/{(I?)LINK([^.]*)\.([^.]*)\.([^}]*)}/', '_rep', $foo); 

function _rep($m) { 
    $x = ' href="'.$m[2].'.php?'.$m[3].'">'.$m[4].'</a>'; 
    if($m[1]) { return '<a class="ilink"'.$x; } 
    return '<a'.$x; 
} 

他們都返回完全相同的輸出。第一個更容易閱讀。第二個只需要運行一半的正則表達式。但我不確定哪一個更快,更少密集,並且使用起來更好。

有什麼建議嗎?

+3

簡介它..... –

+0

嗯。必須弄清楚那是什麼以及如何去做,但它給了我一個答案。謝謝! – druidic

+0

個人而言,我更喜歡preg_replace_callback()在這種情況下,因爲它更靈活。 – cleong

回答

2

與更容易閱讀。如果你發現它是瓶頸(我懷疑它將會是什麼),你可以很快優化它。你會發現,當你需要它更新,由於你已經找到了正則表達式的錯誤,你會很高興的與6個月的時間更容易閱讀的版本去;)

記住,語言必須離開「意見的能力「以幫助您使代碼更容易在以後閱讀;)

+1

原來,不太可讀的方式大約需要一半的時間......但是無論哪種方式都不到一毫秒,所以它幾乎不重要,我猜。謝謝。 – druidic

+0

在這種情況下,100%使用更易讀的代碼。如果代碼很難理解,那麼很難維護,這會使開發人員需要更多的時間,並且可能會在未來造成更多的錯誤,我不認爲會有這麼小的速度增加。 KISS - 保持簡單愚蠢的想法。 – VBAssassin

+0

還要考慮程序員花費多少時間來理解和/或調試更復雜的代碼,而花費更多的時間來運行機器時間。 –