我目前正在尝试创建SEO友好的URL。因此我创建了以下正则表达式。我想要的是当URL是例如:
时引导另一个URLda/something/something-else.html => 'da/pages/view/something/something-else'
something/something-else.html => 'pages/view/something/something-else'
something => 'pages/view/something'
我创建了这个正则表达式:
'/(([a-z][^\/])(1))(?:(\/))([^.]+)\.html/' => '$1$2pages/view/$3/'
我们需要的是,第一部分必须长2 - 如果不是,那么它不是语言标签,不应该通过。然后剩下的就是没有。 (点)里面(因为“.html”部分)。
这可能吗?
答案 0 :(得分:3)
我没有对它进行过测试,但您可以通过这种方式为表达式添加限制:
'#^/[a-z]{2}/(([a-z][^\/])(1))(?:(\/))([^.]+)\.html#' => '$1$2pages/view/$3/'
^ / [a-z] {2} /将强制在行的开头(^)有2 [a-z]。
我已将分隔符从/更改为#,因此您无需转义/.
PS。语言代码如果包含区域修饰符,则可以包含2个以上的字母:pt_BR,pt_PT和en_US。
答案 1 :(得分:3)
尝试使用:
$arr = array('da/something/something-else.html', 'something/something-else.html', 'something');
foreach ($arr as $str) {
echo $str,' => ';
$str = preg_replace("~^([a-z]{2}/|)([^.]*)(?:\.html)?$~", "$1pages/view/$2", $str);
echo $str,"\n";
}
<强>输出:强>
da/something/something-else.html => da/pages/view/something/something-else
something/something-else.html => pages/view/something/something-else
something => pages/view/something
可以查看解释here
答案 2 :(得分:0)
假设您的主题文本始终是相对URL,则应执行此操作:
$re = '%^([A-Za-z]{2}/)?(.*?)(\.html)?%i';
$url = preg_replace($re, '$1pages/view/$2', $url);
修改已修复以删除可选的.html
扩展程序。