1

我想在我们的代码迁移后处理大量文件。迁移工具可以处理正则表达式,我们编写如下内容:
'# Replace ".Columns(", ".Columns.Item("
这将所有出现的 ".Columns(" 替换为 ".Columns.Item("。

作为一个我们的要求我想用双引号替换 NullString 单词,即“”
例如 Optional ByVal strID2 As String = NullString
应该成为
Optional ByVal strID2 As String = “”

这是必需的,因为 VB6 中的 NullString 现在正在成为一个类变量,而在函数声明中它需要是一个常量。
所以,我需要一个具有以下标准之一的正则表达式:

  1. 确保它在函数声明中,即有单词“Function”,然后是它的名称并打开一个括号“(”。然后任何出现的 [= NullString] 都应该替换为 [= “”] 直到我们点击右括号“)”,如声明可以在多行上。
  2. 只要看看它的可选参数。因此,匹配单词“Optional”,然后匹配“As String = NullString”,并将 NullString 替换为“”。

我可以使用 2 之一作为标准,但无法编写 RegEx。下面是我的示例文件,我已经解释了我想要的每一行。


我的示例文件内容

第 1行:Public Function getAllAddresses(ByVal lngObjectType As String, ByVal strID1 As String, Optional ByVal strID2 As String = NullString, Optional ByVal strID3 As String = NullString, Optional ByVal blnExtraAddresses As Boolean = False, Optional ByRef objDataRequest As CDataRequest = Nothing) As ADORecordset
第 2 行:Dim s as String
第 3行:s = NullString
第 4 行(空白):
第 5行:Public Function getDefaultPaymentAddress(ByVal lngObjectType As Integer, ByVal strID1 As String, ByVal strID2 As String, Optional ByRef objDataRequest As CDataRequest = Nothing) As typAddress
第 6行:Public Function myfunc(Optional ByVal strID2 As String = NullString, _
第 7行:                  Optional ByVal strID3 As String = NullString, _
第 8行:                  Optional ByVal blnExtraAddresses As Boolean = False, _
第 9行:                  Optional ByRef objDataRequest As CDataRequest = Nothing) As String
第 10行:直到文件末尾的'Some code comments with = NullString
更多行


每行的预期输出

  1. 第 1 行:作为一条大行,只需输出整个声明,并将 NullString 替换为引号,即“”。
  2. 第 2 行:原样
  3. 第 3 行:原样 [注意 NullString 不应被替换]
  4. 第 4 行:原样,即空白
  5. 第 5 行:原样。这里没有 NullString 所以不匹配
  6. 第 6 到 9 行:2 个 NullString 替换为双引号(第 6 和 7 行)
  7. 第 10 行:原样。这只是一个评论。
    我可能有类似的东西If myVar = NullString Then,但它不应该被匹配和替换。
    在此先感谢您的帮助。
    问候,
    尼克
4

1 回答 1

1

不可能用一个正则表达式进行所有更改。

您可以尝试以下方法:

' Repeat this until there are no more changes.
Search: (Function +\w+ *\([^)]*?)\bNullString\b
Replace: $1""

' Use a multiline match for this one.
Search: ^([ \t]*\w+ *= *)NullString\b
Replace: $1""
于 2012-07-12T16:25:28.377 回答