Regex 不包含单词的ColdFusion正则表达式
我在使用ColdFusion 10构造正则表达式时遇到问题。如果URL在任何子域末尾包含“dev”且其中包含“mydomain.com”,则需要reFind()返回零 我在Adobe的文档中发现了以下内容: ()基于此,我尝试使用前瞻概念 本以为这样行得通,但事实并非如此:Regex 不包含单词的ColdFusion正则表达式,regex,coldfusion,word,coldbox,Regex,Coldfusion,Word,Coldbox,我在使用ColdFusion 10构造正则表达式时遇到问题。如果URL在任何子域末尾包含“dev”且其中包含“mydomain.com”,则需要reFind()返回零 我在Adobe的文档中发现了以下内容: ()基于此,我尝试使用前瞻概念 本以为这样行得通,但事实并非如此: reFind("(?!dev)\.mydomain\.com$", "subdomaindev.mydomain.com") = 13 reFind("(?!dev)\.mydomain\.com$", "s
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
这是我期望从(?=)得到的结果:
注意:这是用于ColdBox的环境配置的,我只能将一个正则表达式传递给一个名为“environments”的变量,然后该变量调用匹配环境的方法。我不希望在该方法中进行第二次检查以查找“dev.”,但如果必须的话,我会这样做
谢谢您的帮助当不尝试查找内容时,正则表达式没有多大帮助 以下内容可能会为您提供一个正确的起点:
^((?!dev).)*$
如果在域中的任何位置找到(dev),则上述值将返回零。您可能需要使用它才能将其仅应用于子域部分
如果您可以添加自己的代码(这样您就不必使用正则表达式),您可以这样做。(这可能也更容易被某些人通过正则表达式理解):
#伊斯德夫#
(注释太长)
我不明白为什么这两个都是零
reFind((?=dev)\.mydomain\.com$,“subdomaindev.mydomain.com”)=0
说实话,我也没有。然而,我遇到了一个似是而非的解释。要解释(使用您的值):
向前看从他们所处的角色向前看-
您已将其放置在
之前。所以,你得到的实际上是
说“任何以.mydomain.com
结尾的词,只要前三个字符
从那个位置开始(.my
)不是dev
”,这总是正确的
。。或者在(?=dev)
的情况下,始终为false,因为显然字符.my
永远不能等于dev
进一步搜索,亚当·卡梅隆(Adam Cameron)发表了一篇详细的博客文章。“负面外观”部分包含一个用于确认字符串不包含单词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$
非常感谢你,这非常有效。从你的答案和链接的帖子中,我想我也理解了这里发生的事情。基本上,前瞻性搜索我不想要的整个领域,然后我搜索什么是可以接受的。“给我'*.mydomain.com',只要它不是域'*dev.mydomain.com',我的最后一个正则表达式是:^(?!dev\.mydomain\.com).*\.mydomain\.com$@zabuuq-刚刚注意到您的编辑。感谢您发布最终代码。我将更新答案,以便让下一个家伙更清楚地看到解决方案。谢谢。确实,regex不是为此而构建的。
^(?!.*CAT).*$
reFind("^(?!.*dev\.mydomain\.com$).*$","subdomain.mydomain.com")
reFind("^(?!.*dev\.mydomain\.com$).*$","subdomaindev.mydomain.com")
^(?!.*dev\.mydomain\.com).*\.mydomain\.com$