【问题标题】:What is the regex for the escaping []?转义 [] 的正则表达式是什么?
【发布时间】:2021-04-01 10:04:16
【问题描述】:

我正在尝试在 excel 中匹配正则表达式 VBA 中的方括号,即 []。我正在尝试使用以下代码,但它不起作用。

 Public Function IsSpecial(s As String) As Long
    Dim L As Long, LL As Long
    Dim sCh As String
    IsSpecial = 0
    For L = 1 To Len(s)
        sCh = Mid(s, L, 1)
        If sCh Like "[0-9a-zA-Z/;@%,'‚.+&/\(): ]" Or sCh = "_" Or sCh Like "[-]" Or sCh Like "\[" Then
        Else
            IsSpecial = 1
            Exit Function
        End If
    Next L
End Function

【问题讨论】:

  • Like 不支持正则表达式,它只支持通配符。
  • 如果 sCh 喜欢 "[0-9a-zA-Z/;@%,'‚.+&/(): ]" 或 sCh = "_" 或 sCh 喜欢 "[-]" Or sCh Like "[" 这是我的实际情况,like 工作正常,只有最后一个 OR 条件不起作用
  • 不,它不起作用。
  • 好的,刚刚找到,你需要Ch Like "[[]"
  • 不,仍然无法正常工作。我已经更新了我的问题。因此,如果代码找到 [] 它应该返回 0 但在使用上述建议后它仍然返回 1

标签: regex vba wildcard


【解决方案1】:

根据Using the Like operator and wildcard characters in string comparisons

您可以使用括在括号 ([ ]) 中的一组一个或多个字符 (charlist) 来匹配表达式中的任何单个字符,并且 charlist 几乎可以包含 ANSI 字符集中的任何字符,包括数字。 您可以使用特殊字符开括号 ([)、问号 (?)、数字符号 (#) 和星号 (*) 直接匹配自己,前提是包含在括号中。 不能在组内使用右括号 (]) 来匹配自身,但可以在组外将其用作单个字符。

所以,你需要使用

Ch Like "[[]"

但是,您拥有的函数不符合您的逻辑,因为它单独检查每个字符,并且您要确保将 [] 作为字符序列进行检查。

使用正则表达式,它看起来像

Public Function IsSpecial(s As String) As Long
    Dim L As Long, LL As Long
    Dim rx As New regExp
    rx.Pattern = "^(?:[0-9a-zA-Z/;@%,'‚.+&/\\(): _-]|\[])*$"
    IsSpecial = 0
    If Not rx.Test(s) Then IsSpecial = 1
End Function

【讨论】:

  • 对不起,我需要同时匹配左括号和右括号,而不仅仅是其中任何一个
  • 如果找到该模式,那么我的代码返回 0,否则返回 1。现在我的问题是我也想匹配 [](它们都打开和关闭方括号)
  • @newbie0007 看来您想检查输入中是否有[] 子字符串,对吧?但是现在,您需要单独检查每个字符。
  • 是正确的,并且在使用您的代码 Ch Like "[ [ ]" 函数后仍然返回 1,因为您的代码与右括号不匹配
  • @newbie0007 使用正则表达式会简单得多。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 2011-04-20
相关资源
最近更新 更多