具有多个模式的PHP preg_Match

时间:2019-05-25 作者:tw8sw8dw8

我正在尝试将两种preg\\u匹配模式分别与|、、组合在一起,。

/blog\\/page\\/[0-9]+\\/?$/ with /tag\\/ skip in /blog/page/ and /tag/
/page\\/[0-9]+\\/?$/ with /[0-9]+\\/?$/ ex. /page/2/ and only /2/
/(page\\/[0-9]+\\/?)$/ with /([0-9]+\\/?)$/

    function redirect_pagination() {
    if(!preg_match(\'/blog\\/page\\/[0-9]+\\/?$/,|,/tag\\/\', $_SERVER[\'REQUEST_URI\'])) {
        if(preg_match(\'/page\\/[0-9]+\\/?$/,|,/[0-9]+\\/?$/\', $_SERVER[\'REQUEST_URI\'])) {
            $new_url = preg_replace(\'/(page\\/[0-9]+\\/?)$/,|,/([0-9]+\\/?)$/\', \'\', $_SERVER[\'REQUEST_URI\']);
            wp_redirect($new_url, 301);
            exit;
        }
    }
}
add_action( \'init\', \'redirect_pagination\', 1 );

1 个回复
SO网友:Leif Högberg

我想这就是你要找的

if (preg_match(\'@^/((?!blog|tag)[^/]+)/(?:page/)?\\d+@\', $_SERVER[\'REQUEST_URI\'], $m)) {
    wp_redirect("/$m[1]", 301);
}
regexp使用lookahead确保第一个匹配不是blog或tag。

这个\'[^/]+\' part匹配任何非正斜杠的内容(/).

(?:page/)? - 对进行可选匹配\'page/\'

\\d+ - 匹配任意数字。

这不会重定向\'/blog/2 如果你愿意\'/blog/2\' 要重定向但不\'/blog/page/2\' 然后将上面的regexp更改为\'blog/page\' 现在上面写着\'blog\'.

附言:我知道这是5个月前的事了,你现在可能已经搬家了,但我还是会把它放在这里,以防其他人在同样的问题上需要帮助

相关推荐

如何在页眉和页脚文件中包含自定义PHP文件

我创建了一个自定义文件,页眉和页脚都需要该文件来呈现某些内容。如果我愿意的话include($_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-content/themes/myTheme/myCustomFile.php\'); 在header.php 文件它按预期工作,但仅在标题中。如果我这样做的话,页脚也是一样的include($_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-content/themes/myTheme/myCustomFile.php\'