我有一個MS Access數據庫與function(感謝@MPękalski)沿着由在查詢稱爲加入在MS Access數據庫中存儲的正則表達式殺死功能
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"
的功能,我可以得到返回結果(除了「藍[]?漿果」由於[])。
爲什麼當整個正則表達式存儲在表中馬赫失敗?
「\ B」 可能是退格字符。一般來說,你必須逃避所有的逃跑,還是Vba不同?什麼是空字符類'[]'? – sln
嘗試在'with'塊之前插入'Msgbox mypattern',以便仔細檢查它包含的內容。 –
@sln []?是一個非必需的空間來匹配藍莓和藍莓(我不寫規格,我只需要編程它們:)) – Aba