我需要让我的正则表达式匹配一个字符串的部分,其中有一个"(随机值)"除非它在随机值中找到@里面,否则它应该忽略该部分。
例如,我有这个字符串
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, @"\(^(?!\@)(.*?)\)" );
哪个不匹配
答案 0 :(得分:1)
\([^@]*?\)
应该有效。 See demo.
说明:
\( // match a literal "("
[^@]*? // match any text except "@"...
\) //...up to the next ")" character
请注意,这并不支持foo(bar())
等嵌套大括号。