跳过Regex中引号之间的文本

本文关键字:之间 文本 Regex 跳过 | 更新日期: 2023-09-27 18:28:57

我在.NET中使用IgnoreCaseMultiline获得了以下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可能不是您的最佳选择。相反,您可以做的是(在使用当前regex过滤除引号之外的所有内容之后),计算textToFind出现之前和之后的引号数量。如果这两个计数都是奇数,那么你的关键词周围有引号,应该去掉这一行。如果两者都是偶数,那么您在其他地方有匹配的引号(或者根本没有引号),应该保持一致。然后对双引号重复此过程。你只需穿过绳子一次就可以完成这一切。

编辑以解决您正在通过代码搜索的更新:还有一些额外的考虑因素需要考虑。

  • 转义引号(跳过转义字符后的字符,它将不被计算在内)
  • 带注释的引号,例如一行中间的/* " */。当您点击/*时,只需跳到下一个*/,然后继续检查字符。您可能还想检查textToFind的出现是否在注释中
  • 行尾'引号-如果它出现在关键字之前(在文字字符串之外),则它不是有效的方法调用

底线仍然是正则表达式并不是您要查找的droid。你最好遍历行并解析它们。

在您给出的所有示例中,这似乎应该适用于您的实际实现:

/'bmyFunc'(/

演示-查看控制台。

只要你没有像"i'm going to call myFunc()"这样的东西,但如果你开始尝试处理引号、多个引号、嵌套引号等……就会变得非常混乱(比如尝试用regex解析dom)。

此外,您似乎正在检查vbscript代码。vbscript代码中的注释以'开头,对吗?你也可以检查一下,因为看起来你是逐行这样做的,这应该适用于那些类型的评论:

/^'s*[^'].*'bmyFunc'(/

演示