Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式:替换部分动态字符串_Regex_Sql Server 2005 - Fatal编程技术网

Regex 正则表达式:替换部分动态字符串

Regex 正则表达式:替换部分动态字符串,regex,sql-server-2005,Regex,Sql Server 2005,我有一根绳子 IsNull(VSK1\u DVal.RuntimeSUM,0), 我需要删除IsNull部分,因此结果将是 VSK1\u DVal.RuntimeSUM, 我对RegEx非常陌生,但这不会是一个问题,如果不是一件事的话: VSK1是动态部件,可以是A-Z、0-9和任意长度的任意组合。如何用正则表达式替换字符串?我使用MSSQL 2k5,我认为它使用了一组通用的正则表达式规则 编辑:我忘了说,我正在SSMS查询窗口的替换框(^H)中进行替换-而不是构建正则表达式查询 溴 马吕斯 然

我有一根绳子

IsNull(VSK1\u DVal.RuntimeSUM,0),

我需要删除IsNull部分,因此结果将是

VSK1\u DVal.RuntimeSUM,

我对RegEx非常陌生,但这不会是一个问题,如果不是一件事的话:
VSK1是动态部件,可以是A-Z、0-9和任意长度的任意组合。如何用正则表达式替换字符串?我使用MSSQL 2k5,我认为它使用了一组通用的正则表达式规则

编辑:我忘了说,我正在SSMS查询窗口的替换框(^H)中进行替换-而不是构建正则表达式查询

溴 马吕斯


然后选择组匹配号1。

这里有一个正则表达式应该可以工作:

[^(]+\(([^,]+),[^)]\)
orig = "somestuff = IsNull(VSK1_DVal.RuntimeSUM,0),"
regex = /=\s*\w+\(([^,]+),[^)]\)/
result = orig.sub(regex){$1} # result => somestuff = VSK1_DVal.RuntimeSUM,
然后使用
$1
捕获组提取所需的零件

我在ruby中做了一次理智检查:

orig = "IsNull(VSK1_DVal.RuntimeSUM,0),"
regex = /[^(]*\(([^,]+),[^)]\)/
result = orig.sub(regex){$1} # result => VSK1_DVal.RuntimeSUM,
如果你有一个你想要保留的前缀,它会变得更加棘手。如果你有这个:

"somestuff = IsNull(VSK1_DVal.RuntimeSUM,0),"
在这种情况下,您需要某种方法来识别模式的开始。也许您可以使用“=”来标识模式的开始?如果是这样,这应该是可行的:

[^(]+\(([^,]+),[^)]\)
orig = "somestuff = IsNull(VSK1_DVal.RuntimeSUM,0),"
regex = /=\s*\w+\(([^,]+),[^)]\)/
result = orig.sub(regex){$1} # result => somestuff = VSK1_DVal.RuntimeSUM,
但是没有等号的情况就会失败。也许您可以使用“IsNull”来标识模式的开始?如果是,请尝试以下操作(注意表示不区分大小写匹配的“/i”):


这是一个非常有用的站点:

他们有一个测试仪和一个备忘单,这对此类快速测试非常有用

我测试了Dave的解决方案,它运行良好,除了它还删除了您希望保留的尾随逗号。小事一桩

试试这个:

IsNULL\((.*,)0\)

你在你的问题中说


我使用MSSQL 2k5,我认为它使用 正则表达式规则的一般集合

除非启用CLR并编译和安装程序集,否则情况并非如此。您可以使用其本机模式匹配语法和
LIKE
,如下所示

WITH T(C) AS
(

SELECT 'IsNull(VSK1_DVal.RuntimeSUM,0),' UNION ALL
SELECT 'IsNull(VSK1_DVal.RuntimeSUM,123465),'  UNION ALL
SELECT 'No Match'
)
SELECT SUBSTRING(C,8,1+LEN(C)-8-CHARINDEX(',',REVERSE(C),2))
FROM T
WHERE C LIKE 'IsNull(%,_%),'

“我使用MSSQL 2k5,我认为它使用的是一套通用的正则表达式规则。”除非启用CLR并编译和安装程序集,否则这是不正确的。嗨,Martin,我绝对忘了说,我需要在SSMS查询窗口中替换,而不是直接在TSQL中替换……嗨,Dave,我有很长的脚本,这些字符串只是其中的一部分。。您的脚本找到了我需要的部分,但之前也有很多字符,如果我的字符串不在第行的开头:VSK1_DVal_SUM=isnull(VSK1_DVal.RuntimeSUM,0)这是我的行,您的正则表达式将选择所有字符串,而不是isnull的部分(…嗨,巴拉,我又添加了两个例子,希望能帮助你保留前缀。祝你好运!嗨,戴夫,因为我必须替换IsNul…,它可以作为模式的开始。我将尝试你的解决方案,并通知你一切是否顺利哦,孩子。这些都没有发现任何东西。看来,我们必须更简单一点——用它编写某种文本解析器c#。仅仅为了一个项目学习正则表达式需要付出很大的努力……这个项目发现字符串没有问题。但是如何替换它呢?