1

我在.NET中使用IgnoreCase和使用以下正则表达式:Multiline

^.*?\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
4

2 回答 2

2

由于所有可能的情况都涉及混合引号,因此正则表达式可能不是您的最佳选择。您可以做的(在使用当前的正则表达式过滤除引号之外的所有内容之后)是计算textToFind. 如果两个计数都是奇数,那么您的关键字周围有引号,应该取消该行。如果两者都是偶数,则您在其他地方有匹配的引号(或根本没有引号),并且应该保留该行。然后对双引号重复该过程。您只需遍历字符串一次即可完成所有这些操作。

编辑以解决您正在通过代码搜索的更新:还有一些其他注意事项需要考虑。

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

底线仍然是正则表达式不是您正在寻找的机器人,在这里。你最好遍历线条并解析它们。

于 2013-08-23T13:16:04.773 回答
1

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

/\bmyFunc\(/

演示- 查看控制台。

只要你没有类似的东西"i'm going to call myFunc()",但是如果你开始尝试处理引号、多引号、嵌套引号等......它会变得非常混乱(就像试图用正则表达式解析 dom)

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

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

演示

于 2013-08-23T13:45:52.640 回答