【发布时间】:2014-01-16 19:31:02
【问题描述】:
我有一个 MS Access 数据库和一个 function (感谢 @MPękalski),它由联接中的查询调用
create table OSS_File(
id number,
Kw text(255));
insert into OSS_File(ID,kw) values(1,"black or white");
insert into OSS_File(ID,kw) values(2,"green");
insert into OSS_File(ID,kw) values(3,"blue berry");
insert into OSS_File(ID,kw) values(4,"blueberry");
insert into OSS_File(ID,kw) values(5,"bluegreen");
insert into OSS_File(ID,kw) values(6,"yellow");
create table restricted_words(
restricted_word text(255));
insert into restricted_words(restricted_word) values("\bblack\b");
insert into restricted_words(restricted_word) values("^green$");
insert into restricted_words(restricted_word) values("^blue[ ]?berry$");
insert into restricted_words(restricted_word) values("yellow");
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
SELECT restricted_words.restricted_word, OSS_File.ID, OSS_File.kw
FROM restricted_words INNER JOIN OSS_File
ON restricted_words.restricted_word=my_regexp(nz(OSS_File.kw),restricted_words.restricted_word);
我本来希望得到除了 ID #5 之外的所有东西,但我只得到了 #6。 但是,如果我删除 ^、$ 或 \b,我会重写函数,如
.Pattern = "^" & mypattern & "$"
or
.Pattern = "\b" & mypattern & "\b"
我可以取回结果(除了“blue[ ]?berry”,因为 [ ]?)。
为什么当整个正则表达式存储在表中时,mach 会失败?
【问题讨论】:
-
"\b" 可能是退格字符。一般来说,你必须逃避所有的逃跑,还是Vba不同?什么是空字符类
[ ]? -
尝试在
with块之前插入Msgbox mypattern,以便仔细检查其中包含的内容。 -
@sln [ ]?是一个非必需的空间来匹配蓝莓和蓝莓(我不写规范,我只需要对它们进行编程:))
-
@sln \\bblack\\b 也好不到哪里去。
-
@BernardSaucier 我使用了 Debug.Print r.Pattern,它是正确的
标签: regex ms-access join ms-access-2007 vba