我遇到过一种情况,我需要用正则表达式找到的值替换部分字符串,但使用正则表达式作为最终结果的基础。
警告:这是为了解决网站上更大的规范化问题。
我们有一个自定义CMS,它将通过正则表达式响应URL:
例如:
Request URI: /mysection/mykey/PageName.htm
Page Match: /mysection/([^/]+)/pagename.htm
如果有人请求/mysection/mykey/PageName.htm,虽然这样可行,但它不是正确的页面,在这种情况下正确的页面是/mysection/mykey/pagename.htm。
如果我最初进行不区分大小写的匹配,我可以查看链接到该页面的人是否正确。如果他们没有,我们不显示404,我们想要做的是在部分生成rel =“canonical”告诉谷歌哪个页面是正确的,并且这实际上是重复。
页面的正确网址为:
/mysection/mykey/pagename.htm
所以,我需要做的是将“mykey”部分从Request URI叠加到Page Match字符串中,但将页面匹配字符串的版本作为结果的总和。
我一直在查看preg_replace,但由于可以有多个替换,因此无法为其提供所需的第二个参数。
这是我写的一些代码,以便达到我现在所处的位置:
// $page['uri'] is the regex to match
// $URL is the requested URL at the web server.
// NB: it is not important to worry about if we have found a valid or invalid URL
// at this stage as that has already been processed prior to this point.
if (preg_match("|". $page['uri'] ."|", $URL)) {
// we get here if the URLs match correctly and case sensitively.
echo "Matches" . PHP_EOL;
} else {
// we get here if the URLs don't case sensitively match
echo "Doesn't match" . PHP_EOL;
}
这是在不匹配的部分我遇到了麻烦,因为这是我必须建立rel =“规范”的网址,这应该是带有([^ /]的$ page ['uri']版本+)替换为所包含的$ URI部分。
答案 0 :(得分:0)
对敏感正则表达式中的大小写使用i
修饰符:
http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php
答案 1 :(得分:0)
这应该是一个三步程序:
mykey
)/mysection/XXXXXXXXXX/pagename.htm
输出为/mysection/mykey/pagename.htm