首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于正则表达式的CFEClipse搜索不包含属性的标记

基于正则表达式的CFEClipse搜索不包含属性的标记
EN

Stack Overflow用户
提问于 2011-08-25 16:18:43
回答 2查看 124关注 0票数 0

我已经找到了一些正则表达式,但是在CFEclipse中很难找到如下语法:

不包含属性名称cfquery标记的所有实例

我试过了

代码语言:javascript
复制
<cfquery [^>]*(?!(name=))[^>]*>

这是我想要捕捉的:

cfquery标记,后面跟着许多不是关闭>的字符,NOT后面跟着name属性,后面跟着任何数量的字符,这些字符不是结束的>,后面是结束的E 116E 217。

这会发现大量匹配,其中一些do包含名称属性,而有些则没有(因此显然不正确)。

有人能用线索棒打我吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-25 16:27:10

看起来您应该为此使用XML解析器,但您的问题是,[^>]*是贪婪的,如果存在名称属性,它将与之匹配。您需要以下内容:

代码语言:javascript
复制
<cfquery (?![^>]*name=)[^>]*>

通过将[^>]*移动到负前瞻,您可以确保"name=“在下一个>之前不存在于字符串中。

票数 2
EN

Stack Overflow用户

发布于 2011-08-26 13:00:38

如果要对每个字符执行前瞻性操作,直到开始标记结束,则需要拆分字符类和量词,如下所示:

代码语言:javascript
复制
<cfquery\b(?:(?!name=)[^>])*>

注意\b (word边界)而不是空格-这将允许<cfquery>匹配(同时仍然阻塞<cfqueryparam...>标记。(字母数字字符后面的\b确保下一个字符是非字母数字字符。)

同样值得指出的是,(?:.)是一个非捕获组,类似于普通的(.),但是不创建反向引用,因为我们不需要它。

当然,这种不匹配的可能性很小--如果您有一个属性notname或您有name = "whatever",那么这两者都将被错误地对待。

要解决这个问题,这次可以在名称之前再次使用\b,然后使用可选的\s允许(但不需要)属性名称和等号之间的任何空格:

代码语言:javascript
复制
<cfquery\b(?:(?!\bname\s*+=)[^>])*>

如果您可能在任何地方都有混合/大写的标记/属性,请不要忘记启用了大小写不敏感的标记。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7193819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档