日期:2014-05-18 浏览次数:20702 次
using System;
using System.Data.SqlTypes;
public partial class RegExp
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBoolean RegExp_Like(SqlString input,SqlString pattern)
{
if (input.IsNull || pattern.IsNull) return false;
return System.Text.RegularExpressions.Regex.IsMatch(input.Value, pattern.Value);
}
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString RegExp_Replace(SqlString input,SqlString pattern,SqlString replacement)
{
if (input.IsNull || pattern.IsNull || replacement.IsNull) return input;
return new System.Text.RegularExpressions.Regex(pattern.Value).Replace(input.Value, replacement.Value);
}
};
create database sqlclr
go
use sqlclr
go
exec sp_configure 'clr enabled', '1'
go
reconfigure;
exec sp_configure 'show advanced options', '1';
go
ALTER DATABASE sqlclr SET TRUSTWORTHY On
go
CREATE ASSEMBLY SqlClr_RegEx FROM 'E:\sqlclrdata\SQLCLR_RegExp.dll' WITH PERMISSION_SET = UnSAFE;
--
go
CREATE FUNCTION dbo.ufn_RegExp_Like
(
@input nvarchar(max),
@pattern nvarchar(4000)
)
RETURNS bit
AS EXTERNAL NAME SqlClr_RegEx.RegExp.RegExp_Like
go
CREATE FUNCTION dbo.ufn_RegExp_Replace
(
@input nvarchar(max),
@pattern nvarchar(4000),
@replacement nvarchar(4000)
)
RETURNS nvarchar(max)
AS EXTERNAL NAME SqlClr_RegEx.RegExp.RegExp_Replace
set nocount on declare @t table(teststring varchar(50)) insert into @t select '上海市南京路100号2弄3号' insert into @t select 'jinjazz@sina.com.cn' insert into @t select '剪刀@msn.com' insert into @t select 'fdf98s' --获取合法邮箱 select * from @t where dbo.ufn_RegExp_Like(teststring,'\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*')>0 /* teststring -------------------------------------------------- jinjazz@sina.com.cn 剪刀@msn.com */ --替换数字 select dbo.ufn_RegExp_Replace(teststring,'[\d*$]','*') as newstring from @t /* newstring ------------------------------------------------- 上海市南京路***号*弄*号 jinjazz@sina.com.cn 剪刀@msn.com fdf**s */ set nocount off