Regex AEM dispatcher中的正则表达式格式不同

Regex AEM dispatcher中的正则表达式格式不同,regex,aem,Regex,Aem,当我们创建具有正斜杠的正则表达式时,我们需要在正斜杠之前放置一个反斜杠,因为正斜杠是未转换的分隔符。例如,如果我希望我的正则表达式匹配/content/att,那么我需要像这样放置正则表达式 /content\/att。这也行得通 但是,当我们在AEM中添加dispatcher规则以允许url路径时,不需要使用反斜杠来表示未转换的分隔符。如果有人能帮我理解这一点,我将不胜感激。我的意思是,为什么我们在编写正则表达式时需要反斜杠,而不是在dispatcher规则的url路径中使用相同的正则表达式时

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

但是,当我们在AEM中添加dispatcher规则以允许url路径时,不需要使用反斜杠来表示未转换的分隔符。如果有人能帮我理解这一点,我将不胜感激。我的意思是,为什么我们在编写正则表达式时需要反斜杠,而不是在dispatcher规则的url路径中使用相同的正则表达式时

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

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

我不熟悉AEM Dispatcher,但以下是对正则表达式问题的一般回答:

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

下面是一个示例:这两个JavaScript正则表达式是相同的:

  • 让regex1=/^\/content\/att/
  • 让regex2=newregexp(“^/content/att”)

我对AEM Dispatcher不熟悉,但以下是对正则表达式问题的一般回答:

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

下面是一个示例:这两个JavaScript正则表达式是相同的:

  • 让regex1=/^\/content\/att/
  • 让regex2=newregexp(“^/content/att”)

    • 简短回答:因为这是两种不同类型的正则表达式表示

      长答覆:

      历史上,正则表达式最早出现在QED和ed等文本EDTOR中。在那里,正则表达式用于字符串替换(搜索和替换)。这些工具需要某种方法来区分搜索正则表达式和替换字符串,这就是我们获得分隔符的原因。例如,替换ed中某些文本的命令将是
      s«DELIMITER»search regex«DELIMITER»替换字符串«DELIMITER»标志

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

      一些编程语言将
      /
      编码为regex文本事实上的标准分隔符。JavaScript就是一个例子

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


      您没有向我们显示您的apache dispatcher配置文件,因此我不确定您要在哪里转义斜杠。我知道apache的mod_rewrite也不使用分隔正则表达式。

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

      长答覆:

      历史上,正则表达式最早出现在QED和ed等文本EDTOR中。在那里,正则表达式用于字符串替换(搜索和替换)。这些工具需要某种方法来区分搜索正则表达式和替换字符串,这就是我们获得分隔符的原因。例如,替换ed中某些文本的命令将是
      s«DELIMITER»search regex«DELIMITER»替换字符串«DELIMITER»标志

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

      一些编程语言将
      /
      编码为regex文本事实上的标准分隔符。JavaScript就是一个例子

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

      您没有向我们显示您的apache dispatcher配置文件,因此我不确定您要在哪里转义斜杠。我知道apache的
      mod_rewrite
      也不使用分隔正则表达式