2012-11-18 36 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

还要考虑程序员花费多少时间来理解和/或调试更复杂的代码,而花费更多的时间来运行机器时间。 –