【问题标题】:Regex expression format is different in AEM dispatcherAEM 调度程序中的正则表达式格式不同
【发布时间】:2021-05-19 20:00:37
【问题描述】:

当我们创建带有正斜杠的正则表达式时,我们需要在正斜杠之前放置一个反斜杠,因为正斜杠是未转义的分隔符。例如,如果我希望我的正则表达式匹配 /content/att,那么我需要像这样放置正则表达式 /content\/att。这也有效。

但是当我们在 AEM 中添加调度程序规则以允许 url 路径时,未转义的分隔符不需要反斜杠。我很感激有人可以帮助我理解这一点,我的意思是为什么我们在编写正则表达式时需要反斜杠,但在调度程序规则的 url 路径中使用相同的正则表达式时不需要。

在dispatcher中,查看url路径——/att之前没有反斜杠

/type "allow"
/url "/content/att"
/extension '(gif)'
}

【问题讨论】:

    标签: regex aem


    【解决方案1】:

    简答:因为这是两种不同类型的正则表达式。

    长答案:

    从历史上看,正则表达式首先出现在 QED 和 ed 等文本编辑器中。在那里,正则表达式用于字符串替换(搜索和替换)。这些工具需要一些方法来区分搜索正则表达式和替换字符串,这就是我们得到分隔符的原因。例如,替换 ed 中某些文本的命令是 s«DELIMITER»search-regex«DELIMITER»substitution-string«DELIMITER»flags

    大多数单字符分隔符都可以使用,但经常选择/。当然,可以将分隔符用作正则表达式或替换的一部分,在这种情况下,必须使用反斜杠对其进行转义。

    一些编程语言已将/ 编码为正则表达式文字的事实上的标准分隔符。 JavaScript 就是一个例子。

    现在,不需要将正则表达式与替换分隔(或允许正则表达式标志)的用法根本不使用分隔符。在 Java 中就是这种情况,没有正则表达式文字,正则表达式总是使用 Pattern 类从字符串创建。这就是为什么在 AEM 中您不需要转义 /

    您没有向我们展示您的 apache 调度程序配置文件,所以我不确定您在哪里转义了斜线。我知道 apache 的 mod_rewrite 也不使用分隔正则表达式。

    【讨论】:

      【解决方案2】:

      我不熟悉 AEM Dispatcher,但这里是您的正则表达式问题的通用答案:

      那是因为"/content/att" 是正则表达式的字符串表示。实际的正则表达式是"/\/content\/att/"。请注意,字符串中的初始斜杠也被转义了。

      这里是一个例子:这两个 JavaScript 正则表达式是相同的:

      • let regex1 = /^\/content\/att/;
      • let regex2 = new RegExp( "^/content/att" );

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-02
        • 2020-12-05
        • 1970-01-01
        • 2018-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多