数据库中使用正则表达式
代码
CREATE
FUNCTION
dbo.RegExpTest (
@source varchar ( 5000 ), -- 需要匹配的源字符串
@regexp varchar ( 1000 ), -- 正则表达式
@ignorecase bit = 0 -- 是否区分大小写,默认为false
)
RETURNS bit -- 返回结果-false,-true
AS
BEGIN
-- 0(成功)或非零数字(失败),是由OLE 自动化对象返回的HRESULT 的整数值。
DECLARE @hr integer
-- 用于保存返回的对象令牌,以便之后对该对象进行操作
DECLARE @objRegExp integer DECLARE @objMatches integer
-- 保存结果
DECLARE @results bit
/*
创建OLE 对象实例,只有sysadmin 固定服务器角色的成员才能执行sp_OACreate,并确定机器中有VBScript.RegExp类库
*/
EXEC @hr = sp_OACreate ' VBScript.RegExp ' , @objRegExp OUTPUT
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
/*
以下三个分别是设置新建对象的三个属性。下面是'VBScript.RegExp'中常用的属性举例:
Dim regEx,Match,Matches '建立变量。
Set regEx = New RegExp '建立一般表达式。
regEx.Pattern= patrn '设置模式。
regEx.IgnoreCase = True '设置是否区分大小写。
regEx.Global=True '设置全局可用性。
set Matches=regEx.Execute(string) '重复匹配集合
RegExpTest = regEx.Execute(strng) '执行搜索。
for each match in matches '重复匹配集合
RetStr=RetStr &"Match found at position "
RetStr=RetStr&Match.FirstIndex&".Match Value is '"
RetStr=RetStr&Match.Value&"'."&vbCRLF Next
RegExpTest=RetStr
*/
EXEC @hr = sp_OASetProperty @objRegExp , ' Pattern ' , @regexp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp , ' Global ' , false
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp , ' IgnoreCase ' , @ignorecase
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
-- 调用对象方法
EXEC @hr = sp_OAMethod @objRegExp , ' Test ' , @results OUTPUT, @source
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
-- 释放已创建的OLE 对象
EXEC @hr = sp_OADestroy @objRegExp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
RETURN @results
END
@source varchar ( 5000 ), -- 需要匹配的源字符串
@regexp varchar ( 1000 ), -- 正则表达式
@ignorecase bit = 0 -- 是否区分大小写,默认为false
)
RETURNS bit -- 返回结果-false,-true
AS
BEGIN
-- 0(成功)或非零数字(失败),是由OLE 自动化对象返回的HRESULT 的整数值。
DECLARE @hr integer
-- 用于保存返回的对象令牌,以便之后对该对象进行操作
DECLARE @objRegExp integer DECLARE @objMatches integer
-- 保存结果
DECLARE @results bit
/*
创建OLE 对象实例,只有sysadmin 固定服务器角色的成员才能执行sp_OACreate,并确定机器中有VBScript.RegExp类库
*/
EXEC @hr = sp_OACreate ' VBScript.RegExp ' , @objRegExp OUTPUT
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
/*
以下三个分别是设置新建对象的三个属性。下面是'VBScript.RegExp'中常用的属性举例:
Dim regEx,Match,Matches '建立变量。
Set regEx = New RegExp '建立一般表达式。
regEx.Pattern= patrn '设置模式。
regEx.IgnoreCase = True '设置是否区分大小写。
regEx.Global=True '设置全局可用性。
set Matches=regEx.Execute(string) '重复匹配集合
RegExpTest = regEx.Execute(strng) '执行搜索。
for each match in matches '重复匹配集合
RetStr=RetStr &"Match found at position "
RetStr=RetStr&Match.FirstIndex&".Match Value is '"
RetStr=RetStr&Match.Value&"'."&vbCRLF Next
RegExpTest=RetStr
*/
EXEC @hr = sp_OASetProperty @objRegExp , ' Pattern ' , @regexp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp , ' Global ' , false
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
EXEC @hr = sp_OASetProperty @objRegExp , ' IgnoreCase ' , @ignorecase
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
-- 调用对象方法
EXEC @hr = sp_OAMethod @objRegExp , ' Test ' , @results OUTPUT, @source
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
-- 释放已创建的OLE 对象
EXEC @hr = sp_OADestroy @objRegExp
IF @hr <> 0 BEGIN
SET @results = 0
RETURN @results
END
RETURN @results
END
--打开高级选项
sp_configure 'show advanced options',1
reconfigure
--设置选项打开
sp_configure 'Ole Automation Procedures',1
reconfigure