正则表达式忽略带有某个字符的字符串

时间:2014-10-06 09:09:19

标签: c# .net regex

我需要让我的正则表达式匹配一个字符串的部分,其中有一个"(随机值)"除非它在随机值中找到@里面,否则它应该忽略该部分。

例如,我有这个字符串

string storeProcDefinition = @"TTTTT.TTTTTTTT (@pname nvarchar, @pdec decimal(18,5) = null, @pnum numeric(18, 10), @pint int = null) AS BEGIN SET NOCOUNT ON; SELECT TTT"

所以我想找到符合"(任何)"的所有部分。在本节中如

(18,5)
(18, 10)

而不是

(@pname nvarchar, @pdec decimal(18,5)`

我的想法是检查字符串中的@符号,或者在找到新符号时重新开始 但Regex没有选择说不包含字符afik。

我有类似的东西

var matches = Regex.Matches(storeProcDefinition, @"\(^(?!\@)(.*?)\)" );

哪个不匹配

1 个答案:

答案 0 :(得分:1)

\([^@]*?\)

应该有效。 See demo.

说明:

\( // match a literal "("
[^@]*? // match any text except "@"...
\) //...up to the next ")" character

请注意,这并不支持foo(bar())等嵌套大括号。