Microsoft Office Access `LIKE` VS `RegEx`

问题描述 投票:0回答:2

我在使用 Access 关键字

LIKE
及其使用时遇到了麻烦。我想在查询表单中使用以下 RegEx(正则表达式)作为一种“验证规则”,其中
LIKE
运算符过滤我的结果:

"^[0]{1}[0-9]{8,9}$"

如何实现这一点?

regex ms-access sql-like
2个回答
27
投票

我知道你不是在问 VBA,但也许你会给它一个机会

如果您打开 VBA 项目,插入新模块,然后选择 Tools -> References 并添加对 Microsoft VBScript Regular Expressions 5.5 的引用。鉴于此,将以下代码粘贴到新插入的模块中。

Function my_regexp(ByRef sIn As String, ByVal mypattern As String) As String
   Dim r As New RegExp
    Dim colMatches As MatchCollection
    With r
        .Pattern = mypattern
        .IgnoreCase = True
        .Global = False
        .MultiLine = False
        Set colMatches = .Execute(sIn)
    End With
    If colMatches.Count > 0 Then
        my_regexp = colMatches(0).Value
    Else
        my_regexp = ""
    End If
End Function

现在您可以在 SQL 查询中使用上面的函数。所以你的问题现在可以通过调用来解决

SELECT my_regexp(some_variable, "^[0]{1}[0-9]{8,9}$") FROM some_table

如果没有匹配到,它将返回空字符串。

希望你喜欢它。


10
投票

我认为 Access 不允许正则表达式匹配(VBA 除外,但这不是您要问的)。

LIKE
运算符甚至不支持交替。

因此需要将其拆分为两个表达式。

... WHERE (Blah LIKE "0#########") OR (Blah LIKE "0########")

#
在 Access 中表示“单个数字”)。

© www.soinside.com 2019 - 2024. All rights reserved.