将变量集成到正则表达式中有什么好的语法 [duplicate]

What good syntax for integrating a variable into regex [duplicate]

提问人:imagIne 提问时间:8/29/2023 最后编辑:Mark RotteveelimagIne 更新时间:8/31/2023 访问量:44

问:

这个问题在这里已经有答案了:
3个月前关闭。

这篇文章在 3 个月前被编辑并提交审核,但未能重新打开帖子:

原始关闭原因未解决

对于多语言网站,我想检测 URL 中是否存在区域代码(fr、en、es 等)。目标是为每个还没有区域代码的 URL 添加区域代码,例如 : https://subdomain.domain.com/fr

在回顾了另一个问题之后,我的不同之处在于使用了没有 .显然,根据上下文使用此语法。'..'

为此,我使用函数和这个条件,它起作用:wp_safe_redirect()

if(preg_match ("/^(?:(?!fr).)*$/i", $_SERVER['REQUEST_URI'])){
   wp_safe_redirect($addlang.'/'.$currentpage);
}

此条件用于重定向到 language from ,因此我需要插入变量而不是“fr”,但此语法被拒绝。$_SERVER['REMOTE_ADDR']'.$visitorlang.'

$visitorlang = "result-of-get.geojs.io";
"/^(?:(?!'.$visitorlang.').)*$/i"

我也尝试过{$var},但没有用。

此外,我将使用一个强大的正则表达式来检测开头的两个字符,而不是区域代码,但再一次不接受这种语法:$_SERVER['REQUEST_URI']

"/^(?:(?![a-z]{2}).)*$/i"

此外,是否还有一种特殊的语法来包含“|”(OR) 仅检测允许的语言:“fr|en|es”。

PHP 正则表达式 变量 语法

评论


答:

0赞 Barmar 8/29/2023 #1

您不需要引号和 .变量在双引号字符串中自动替换。.

if(preg_match ("/^(?:(?!$visitorlang).)*$/i", $_SERVER['REQUEST_URI'])){

评论

0赞 imagIne 8/29/2023
谢谢,我确定我已经尝试过了。你有什么建议吗?"/^(?:(?![a-z]{2}).)*$/I"
0赞 Barmar 8/29/2023
请为此写一个新问题,并举例说明输入和期望的输出。
0赞 imagIne 8/31/2023
基于这个问题链接并与我自己的问题链接进行比较,您能否解释一下在哪些情况下这种语法是必要的,并且在正则表达式中?这有效:这也是:。".$variable."$variable'(?:'.$listlangs.')/?'"/^(?:(?!$$visitorlang).)*$/I"
0赞 Barmar 8/31/2023
几乎没有变量需要语法的情况。您需要将它与更复杂的表达式一起使用,因为您只能插值变量。.
0赞 Your Common Sense 8/31/2023
我们通常不会回答由错别字引起的问题。尤其是具有误导性的标题和与该标题无关的错误答案。