我有两个字符串,如:
http://localhost/web/
和
http://localhost/web/category/
有时会变成:
http://localhost/web/2/
,http://localhost/web/3/
等......
和
http://localhost/web/category/2/
,http://localhost/web/category/3/
等......
我想进行验证并且:
如果链接为http://localhost/web/
,则保持不变。
如果链接为http://localhost/web/2/
,则会变为http://localhost/web/
如果链接为http://localhost/web/category/
,则保持不变。
如果链接为http://localhost/web/category/2/
,则会变为http://localhost/web/category/
我想应该使用preg_replace()
和preg_match()
来完成。
我该怎么做?
感谢。
答案 0 :(得分: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