2017-08-24 46 views
-1

所以我有这样的查询(忽视的事实是,这是不是一个真正的查询,只是用对方了解我的观点)我需要一个正则表达式之前指定的字符串之后查找文本

SELECT 
    [Test1].[Value] 
FROM [test1] AS [testing] 
JOIN test2 AS testing2 ON [stuff].[mtfID] = [otherstuff].[id] 
    AND ((ESP_LOC_3].[LOCDescription] = @ParamMTF)) 

本质上,我需要做的是'@Param'存在的任何地方,我需要能够提取出之前的所有内容,然后到'')'之后。所以关于我的例子,我想要匹配这个:'AND((ESP_LOC_3]。[LOCDescription] = @ParamMTF))'。

我只能够得到“@ParamMTF))以下表达式:

([email protected])(.*?)(?=\)\)).. 
+0

如果,并且总是在新行是很简单的。你能证实这种情况吗? – sam

+0

不幸的是,并不总是在一条新的线上。它有时与其他连接处于同一行。 –

+0

查询总是以您显示的形式出现,或者可以包含其他'AND's? – sam

回答

0

简单的正则表达式它帮助,如果你给你想要什么已经匹配和不匹配多个例子(“预计RESU LT')。

据我了解现在的基本方法似乎足够了:

(AND.*@Param\w+\)\))

Demo

+0

这很好,谢谢! –

+0

很酷。请注意演示中的“单线”标志,它会影响行尾匹配。 – linden2015

0

,如果你想匹配的东西不存在,你将不得不写相当复杂的正则表达式。你的要求可以理解为

'AND((' 后面跟着不 '' 后面 '@Param' 后面 '))'

当你意识到,检查的no AND部分使用REGEX非常复杂,REGEX并不是最好的方法。

我们可以使用另一个正则表达式可能会做同样的事情,但不完全一样,如果我们把它解释为

“AND((”后面“@Param”后面“))”

对于这一点,你可以使用下面

AND\s*\(\(.*[email protected]*?\)\) 
.*? - matches any text in a non greedy fashion 
相关问题