2010-10-10 72 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