跳过Regex中引号之间的文本
本文关键字:之间 文本 Regex 跳过 | 更新日期: 2023-09-27 18:28:57
我在.NET中使用IgnoreCase
和Multiline
获得了以下Regex:
^.*?'WtextToFind'W.*?$
给定多行输入,如:
1 Some Random Text textToFind
2 Some more "textToFind" random text
3 Another textToFinddd random text
当前正则表达式与第1行和第2行匹配。但是,我需要跳过textToFind
位于引号和双引号内的所有行。
有什么想法可以实现吗?
谢谢!
编辑:
说明:我的目的是在VBScript代码中找到一些方法调用。我以为这与我的问题无关,但在阅读了评论后,我意识到我应该对此进行解释。
因此,基本上我想跳过引号或单引号之间的文本,以及引号和行尾之间的所有文本,因为这将是VBScript中的注释:如果我正在寻找myFunc
Call myFunc("parameter") // should match
Call anotherFunc("myFunc") //should not match
Call someFunc("parameter") 'Comment myFunc //should not match
If(myFunc("parameter") And someFunc("myFunc")) //should match
对于所有可能涉及混合引号集的情况,regex可能不是您的最佳选择。相反,您可以做的是(在使用当前regex过滤除引号之外的所有内容之后),计算textToFind
出现之前和之后的引号数量。如果这两个计数都是奇数,那么你的关键词周围有引号,应该去掉这一行。如果两者都是偶数,那么您在其他地方有匹配的引号(或者根本没有引号),应该保持一致。然后对双引号重复此过程。你只需穿过绳子一次就可以完成这一切。
编辑以解决您正在通过代码搜索的更新:还有一些额外的考虑因素需要考虑。
- 转义引号(跳过转义字符后的字符,它将不被计算在内)
- 带注释的引号,例如一行中间的
/* " */
。当您点击/*
时,只需跳到下一个*/
,然后继续检查字符。您可能还想检查textToFind
的出现是否在注释中 - 行尾
'
引号-如果它出现在关键字之前(在文字字符串之外),则它不是有效的方法调用
底线仍然是正则表达式并不是您要查找的droid。你最好遍历行并解析它们。
在您给出的所有示例中,这似乎应该适用于您的实际实现:
/'bmyFunc'(/
演示-查看控制台。
只要你没有像"i'm going to call myFunc()"
这样的东西,但如果你开始尝试处理引号、多个引号、嵌套引号等……就会变得非常混乱(比如尝试用regex解析dom)。
此外,您似乎正在检查vbscript代码。vbscript代码中的注释以'
开头,对吗?你也可以检查一下,因为看起来你是逐行这样做的,这应该适用于那些类型的评论:
/^'s*[^'].*'bmyFunc'(/
演示