如果文件夹和单页的正则表达式我如何使用PHP

时间:2013-07-24 22:15:40

标签: php regex

<?php if (preg_match('/\/(contact|news)\//', $_SERVER['REQUEST_URI']) === 1): ?>
   <a href="/">link</a>
<?php endif; ?>

我是否还可以在/index.html指定文件夹的正则表达式中指定php if这样的单个页面?

2 个答案:

答案 0 :(得分:1)

写得像这样:

<?php 
if (preg_match('/\/(contact\/|news\/|index\.html)/', $_SERVER['REQUEST_URI'])): 
?>

您可以根据需要定义任意数量的页面(请注意最后/已被移动)。但是,这很快就会变得笨拙。

您可能还希望考虑使用preg_quote

<?php 
$startsWith = array(
    'contact/',
    'news/',
    'index.html'
);
foreach($startsWith as &$string) {
    $string = preg_quote($string);
}
if (preg_match('/\/(' . implode('|', $startsWith) . ')/', $_SERVER['REQUEST_URI'])): ?>

尤其是如果不熟悉正则表达式语法,会使管理变得容易一些。

答案 1 :(得分:0)

尝试以下方法:

<?php if (preg_match('/\/(contact|news)\/index\.html/', $_SERVER['REQUEST_URI']) === 1): ?>
   <a href="/">link</a>
<?php endif; ?>

<强>更新

根据您在下面的评论,这是应该有效的代码:

<?php
// you can add .* after index\.html you want to match index.html with get variables
echo preg_match('/\/(index\.html.*|contact\/.*|news\/.*)/','/index.html');
// or just make it strict to match only index.html
echo preg_match('/\/(index\.html|contact\/.*|news\/.*)/','/index.html');
echo '<br>';
echo preg_match('/\/(index\.html|contact\/.*|news\/.*)/','/contact/blablabla');
echo '<br>';
echo preg_match('/\/(index\.html|contact\/.*|news\/.*)/','/news/blablabla');

?>