gpt4 book ai didi

regex - 不包括单词的 ColdFusion 正则表达式

转载 作者:行者123 更新时间:2023-12-01 05:02:11 26 4
gpt4 key购买 nike

我在使用 ColdFusion 10 构建正则表达式时遇到了麻烦。如果 URL 在任何包含“mydomain.com”的子域的末尾包含“dev”,我需要 reFind() 返回零。

    reFind(THE_REGEX, "subdomaindev.mydomain.com") needs to return 0
reFind(THE_REGEX, "subdomain.mydomain.com") needs to return a positive number

我在 Adob​​e 的文档中发现了以下内容:
( http://help.adobe.com/en_US/ColdFusion/10.0/Developing/WSc3ff6d0ea77859461172e0811cbec0a38f-7ffb.html ) 并基于此我尝试使用前瞻概念。

认为这会起作用,但它没有:
    reFind("(?!dev)\.mydomain\.com$", "subdomaindev.mydomain.com") = 13
reFind("(?!dev)\.mydomain\.com$", "subdomain.mydomain.com") = 10

不明白为什么这两者都为零:
    reFind("(?=dev)\.mydomain\.com$", "subdomaindev.mydomain.com") = 0
reFind("(?=dev)\.mydomain\.com$", "subdomain.mydomain.com") = 0

这是我期望的结果 (?=):
    reFind("(?:dev)\.mydomain\.com$", "subdomaindev.mydomain.com") = 10
reFind("(?:dev)\.mydomain\.com$", "subdomain.mydomain.com") = 0

注意:这是用于 ColdBox 的环境配置,我只能将一个正则表达式传递给名为“environments”的变量,然后该变量调用匹配环境的方法。我不想在该方法中进行第二次检查以找到“开发”,但如果必须的话,我会这样做。

感谢您的任何帮助!

最佳答案

(评论太长了)

Don't understand why this gives zero for both

reFind("(?=dev)\.mydomain\.com$", "subdomaindev.mydomain.com") = 0



说实话,我也没有。但是,我遇到了 this thread这提供了一个合理的解释。转述(使用您的值(value)观):

Look-aheads look forward from the character at which they are placed — and you've placed it before the .. So, what you've got is actually saying "anything ending in .mydomain.com as long as the first three characters starting at that position (.my) are not dev" which is always true.



.. 或在 (?=dev) 的情况下, 总是错误,因为显然字符 .my永远不能等于 dev .

进一步搜索发现了 Adam Cameron 关于 regular expressions and look arounds 的详细博客条目。 . “负前瞻”部分包含一个用于确认字符串不包含单词 CAT 的表达式示例:
^(?!.*CAT).*$

博客条目提供了更好的解释,但本质上它利用了 ^ (开始), $ (完)和 .* (零个或多个字符) - 搜索整个字符串。而您当前的表达式仅搜索紧随其后的字符,即“.mydomain.com”。

如果我理解正确,您可以使用上述方法确认提供的字符串不以“dev.mydomain.com”结尾。只需将“CAT”更改为您尝试匹配的子字符串...错误...不匹配。没有经过高度测试,但大致如下:
reFind("^(?!.*dev\.mydomain\.com$).*$","subdomain.mydomain.com")
reFind("^(?!.*dev\.mydomain\.com$).*$","subdomaindev.mydomain.com")

结果:
  • 0 ==>“subdomaindev.mydomain.com”
  • 1 ==>“subdomain.mydomain.com”

  • 免责声明:无论如何,我都不是正则表达式专家 ,所以完全有可能有更好的选择。但是,希望这有助于解释为什么当前表达式没有按您预期的方式工作。

    更新:

    正如评论中指出的@zabuuq 的最终工作表达式是:
    ^(?!.*dev\.mydomain\.com).*\.mydomain\.com$  

    关于regex - 不包括单词的 ColdFusion 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31977314/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com