PHP正则表达式从$#u服务器[';请求URI';]获取WordPress类别slug
我试图使用pre_match模式从PHP正则表达式从$#u服务器[';请求URI';]获取WordPress类别slug,php,regex,wordpress,Php,Regex,Wordpress,我试图使用pre_match模式从$\u服务器['REQUEST\u URI']获取类别slug,但它不起作用 例如,$\u服务器['REQUEST\u URI']返回/category/current affairs/,我想将current affairs设置为我想要使用的变量 到目前为止,我想出了这个,但它不起作用 ^\/category\/(?:\/(\w+)))$/g 非常感谢您的帮助。您的正则表达式匹配: 从字符串的开头开始^ 匹配正斜杠\/ 匹配类别 匹配正斜杠\/ 非捕获组(?:
$\u服务器['REQUEST\u URI']
获取类别slug,但它不起作用
例如,$\u服务器['REQUEST\u URI']
返回/category/current affairs/
,我想将current affairs
设置为我想要使用的变量
到目前为止,我想出了这个,但它不起作用
^\/category\/(?:\/(\w+)))$/g
非常感谢您的帮助。您的正则表达式匹配:
- 从字符串的开头开始
^
- 匹配正斜杠
\/
- 匹配
类别
- 匹配正斜杠
\/
- 非捕获组
重复零次或多次(?:
*
- 在此非捕获组中,将正斜杠与捕获组中的
匹配一次或多次\w
\/(\w+)
- 字符串的结尾
$
\/(\w+)
您正在尝试匹配时事
但这部分是匹配的
- 正斜杠
\/
- 在组中捕获一次或多次
但是您的文本中有一个连字符
-
/category
、2个前斜杠/
和[A-Za-z0-9!]+
它将匹配:
/category//时事
但不是
/category//时事/
/category/currentfairs/
/category//时事/
/category//时事
我想你可以这样得到你的对手:
由于以下几个原因,您的模式不起作用:
/
(在本节\/(?:\/
)\w
与-
不匹配。它与a-zA-Z0-9
/
:(?:\/(\w+)))*$
@
而不是/
来分隔模式)。这允许我们在模式内使用/
,而不必首先转义它
逐字匹配/category/
重置报告匹配的起始点。任何以前使用的字符不再包括在最终匹配中\K
匹配除[^/]*
以外的任何字符任意次数/
您不需要正则表达式。wp有一个为您执行的函数:
if(is_category()) {
$category = get_query_var('cat');
$current_cat = get_category($cat);
echo 'The slug is ' . $current_cat->slug;
}
这应该起作用:
\/category(.*)
一种非常简单的方法是将uri分解为数组并读取第三个值:
$request_uri = explode('/', $_SERVER['REQUEST_URI']);
$category = $request_uri[2];
regex101.com是开发和分析regex的最佳工具。
\/category(.*)
$request_uri = explode('/', $_SERVER['REQUEST_URI']);
$category = $request_uri[2];