我需要在 SQL 中使用 VBA 正则表达式查找表
field1
中“长文本”notes
包含以 -”(连字符和双引号)开头的行的记录。(field1
使用富文本格式(表和表单字段)。如有必要,我可以删除它,但在我的上下文中,富文本很有用)。
双引号存储为其 html 实体
"
可以通过 PLAINTEXT()
函数恢复
为了让事情变得更容易,我首先尝试匹配包含任何引号字符的字段。
我可以找到包含单引号的字段。
SELECT *
FROM notes
WHERE RegexMatch(field1, ".*'.*")
;
但是双引号失败了
SELECT *
FROM notes
WHERE RegexMatch(field1, ".*"".*")
;
我尝试用另一个引号来转义引号字符。
我还粘贴了我的
RegexMatch()
函数,以防相关。
' ----------------------------------------------------------------------'
' Return True if the given string value matches the given Regex pattern '
' ----------------------------------------------------------------------'
Public Function RegexMatch(value As Variant, pattern As String) As Boolean
If IsNull(value) Then Exit Function
' Using a static, we avoid re-creating the same regex object for every call '
Static regex As Object
' Initialise the Regex object '
If regex Is Nothing Then
Set regex = CreateObject("vbscript.regexp")
With regex
.Global = True
.IgnoreCase = True
.Multiline = True
End With
End If
' Update the regex pattern if it has changed since last time we were called '
If regex.pattern <> pattern Then regex.pattern = pattern
' Test the value against the pattern '
RegexMatch = regex.Test(value)
End Function
查询现在可以使用:
SELECT *
FROM notes
WHERE RegexMatch(PLAINTEXT(notes.field1), "-""")
;
如果列使用富文本格式,则
"
在内部存储为 "
。
对该列的任何查询都将使用 HTML 源文本,而不是格式化的 HTML。
您可以通过基于表格创建一个表单来查看源文本,并为具有 TextBox.TextFormat = 纯文本的字段添加一个文本框。
Erik A 在评论中提出了非常好的观点:
您可以使用PlainText函数查询富文本的纯文本表示。
然后就可以用这个来查询双引号了:
WHERE PlainText(fld) LIKE "*""*"
或
WHERE PlainText(fld) LIKE '*"*'