C# 第一个出现的字符分号、空格或单引号的正则表达式

C# 第一个出现的字符分号、空格或单引号的正则表达式,c#,sql,regex,C#,Sql,Regex,我一直在尝试制作一个正则表达式,它可以匹配下面所有的字符串。我能够为前两个生成正则表达式,但无法为下两个生成正则表达式。正则表达式应确保仅在错误消息结束之前执行匹配 RAISERROR 20001 @errmsg; RAISERROR 20001 @errmsg RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg' RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg'; 以下是测试链接: 感谢您的帮助。提前谢谢。我会用这个: \

我一直在尝试制作一个正则表达式,它可以匹配下面所有的字符串。我能够为前两个生成正则表达式,但无法为下两个生成正则表达式。正则表达式应确保仅在错误消息结束之前执行匹配

RAISERROR 20001 @errmsg;
RAISERROR 20001 @errmsg
RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg'
RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg';
以下是测试链接:

感谢您的帮助。提前谢谢。

我会用这个:

\bRAISERROR \d+ @(?:'[\w ]+'|[\w ]+);?


我处理可选的单引号消息时使用了一个替代选项,该选项允许使用此选项,或者允许使用无单引号的消息。

您可以匹配单引号之间的所有字符,或者只匹配非空白字符。如果您不需要捕获组
(?i)raiserror)
,您可以忽略它

(?i)raiserror\s*\d{5,6}\s*@(?:'[^'\r\n]*'|\S+);?
解释

  • (?i)
    不区分大小写的修饰符
  • raiserror\s*\d{5,6}\s*
    Match raiserror和可选空格字符之间的5-6位数字
  • @
    匹配@char
  • (?:
    备选方案的非捕获组
    • '[^'\r\n]*'
      在开始和结束之间匹配除
      '
      以外的任何字符
      '
    • |
    • \S+
      匹配1+非空白字符
  • 关闭组并匹配可选的
我的建议是

^((i)raiserror)\s*\d{5,6}\s*(.+?)(;|\s*)$
捕获以
@
开头的字符串是通过尽可能将几个字符与
(.+?)
匹配来完成的。这允许在行尾之前的通配符后面指定可能的字符

^
匹配行开始
$
匹配行尾

您可以将
([^;\s*]*)
替换为
(@[^;\r\n]*)
。你可以试试下面的正则表达式

(?i)raiserror\s*\d{5,6}\s*(@[^;\r\n]*)

根据您的问题,您可以使用:

'.' 
这将使用至少一个字符匹配世界上的所有内容,因此它将匹配所有四个字符串

或精确匹配四个字符串:

'RAISERROR 20001 @errmsg|RAISERROR 20001 @errmsg|RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg|RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg' 

您尚未指定要匹配的字符串和不匹配的字符串的规则。任何其他解决方案都需要猜测您的意思,但没有解释。

您可以使用
。是否有您不想匹配的字符串?字符串中的某些内容应该被认为是“可概括的”吗?谢谢你,这对我很有用。。。唯一的变化是我将其分组以便于更换。
'RAISERROR 20001 @errmsg|RAISERROR 20001 @errmsg|RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg|RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg'