【问题标题】:Regular expression which matches a URL and return desired value匹配 URL 并返回所需值的正则表达式
【发布时间】:2017-04-21 18:10:25
【问题描述】:

我需要匹配 URL 并返回所需值的正则表达式

示例(如果 URL 匹配)

1. http://example.com/amp 
2. http://example.com/amp/
3. http://example.com/amp~

那么

它应该返回:?amp=1

否则

它应该返回:false

【问题讨论】:

  • 使用正则表达式,您可以过滤字符串,但据我所知,您无法向字符串添加新字符。

标签: php regex wordpress


【解决方案1】:

您应该能够使用preg_replace?amp= 附加到匹配字符串的末尾。它的功能已经具备您需要的if/else 功能,

如果找到匹配项,则返回新的主题,否则主题将原样返回,如果发生错误则返回 NULL。

(或者我误读了it should return noting

-http://php.net/manual/en/function.preg-replace.php

类似

amp\K( |\/|~)$

应该这样做

$string = 'http://example.com/amp~';
echo preg_replace('/amp\K( |\/|~)$/', '$1?amp=1', $string);

$1 是可选的,不确定是否要包含找到的字符。

PHP 演示:https://eval.in/780432

正则表达式演示:https://regex101.com/r/JgcrLu/1/

$ 是字符串的结尾。 () 是一个捕获和更改组。 |s 是改动。 \K 跳过之前匹配的正则表达式部分。

【讨论】:

    【解决方案2】:

    您没有指定您正在使用的编程语言,但您可能需要以下内容:

    php

    $new = preg_replace('%/amp\b(?:/|~)?%si', '/?amp=1', $old);
    

    蟒蛇

    new_string = re.sub(r"/amp\b(?:/|~)?", "/?amp=1", old_string, 0, re.IGNORECASE)
    

    Regex Demo

    【讨论】:

    • 其实我用的是支持正则表达式的WordPress插件“安全重定向管理器”。因此,我需要通过在末尾添加 ?amp 将 URL 末尾具有 amp 的 URL 重定向到新 URL。
    • 感谢@chris85 纠正我。我的意思是,如果它与示例中的任何一个匹配,那么它应该前缀 ?amp=1。看起来安全重定向管理器的开发人员在 Wordpress 论坛上不活跃。你能帮我解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 2020-12-02
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多