2010-10-10 68 views
0

我有兩個字符串,如:使用的preg_match和preg_replace函數

http://localhost/web/

http://localhost/web/category/

,有時會成爲:

http://localhost/web/2/http://localhost/web/3/等....

http://localhost/web/category/3/等等

我希望做一個驗證和:

如果鏈接http://localhost/web/它仍然是相同的。

如果鏈接http://localhost/web/2/成爲http://localhost/web/

如果鏈接http://localhost/web/category/它仍然是相同的。

如果鏈接成爲http://localhost/web/category/

我猜應該使用preg_replace()preg_match()來完成。

我該怎麼辦?

謝謝。

+0

你能否澄清你的意思是「ht-tp」的字面意思,還是僅僅是這樣寫的,所以鏈接不會被創建? – 2010-10-10 17:58:02

+0

它只是爲了防止自動鏈接 – medk 2010-10-10 17:58:41

+0

@ mohamed87,您可以將樣本鏈接格式化爲源代碼(使用0101010工具欄按鈕)。 – 2010-10-10 18:01:39

回答

2

下面是正則表達式,你將需要:

(http:\/\/localhost\/)(web|web\/category)\/([\d]+)\/ 

對於preg_replace函數的功能,您將需要更換的語句根據您的標準,這將重新寫入字符串:

'$1$2' 

上述替換聲明基本上將第一個捕獲組(第一組估值爲http://localhost/的parens)與「web」或「web/category」的第二個捕獲組連接起來。由於我們不關心最後一個捕獲組($ 3),因此我們不會將其添加到替換聲明中;不過,自從我們抓住它之後,我們可以做到。如果你不想捕捉它,用「[\ d] +」替換這個「([\ d] +)」。

以下是與替換結合了圖案的示例代碼以形成一個完整的preg_replace語句:

<?php 

$pattern = '@(http:\/\/localhost\/)(web|web\/category)\/([\d]+)\/@i'; 

$subjects = array(
    'http://localhost/web/2/', 
    'http://localhost/web/category/2/' 
); 

foreach ($subjects as $subject) { 
    echo sprintf('Original: %s, Modified: %s', $subject, preg_replace($pattern, '$1$2', $subject)), PHP_EOL; 
} 

拋上述代碼到一個文件(例如:replace.php),並通過運行它命令行:

php replace.php 
+0

優秀!這就是我需要的。非常感謝! – medk 2010-10-10 20:05:04