第一次出现的字符分号或空格或单引号的正则表达式[关闭]

Posted

技术标签:

【中文标题】第一次出现的字符分号或空格或单引号的正则表达式[关闭]【英文标题】:regex for first occurring char semicolon or empty space or single quote [closed] 【发布时间】:2021-01-30 17:13:01 【问题描述】:

我一直在尝试制作一个可以匹配以下所有字符串的正则表达式。我能够为前两个创建一个正则表达式,但无法为接下来的两个创建一个正则表达式。正则表达式应该使得匹配只执行到错误消息结束。

RAISERROR 20001 @errmsg;
RAISERROR 20001 @errmsg
RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg'
RAISERROR 20001 @'ajhsgdjh jahsgdjahsgdjg';

下面是测试链接:

https://regex101.com/r/ntywvP/3

((?i)raiserror)\s*\d5,6\s*([^;|\s*]*)

感谢任何帮助。提前谢谢你。

【问题讨论】:

您可以使用'.'。是否有您不想想要匹配的字符串?字符串中的某些内容是否应该被认为是“可概括的”? 【参考方案1】:

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

(?i)raiserror\s*\d5,6\s*(@[^;\r\n]*)

Demo

【讨论】:

谢谢,这对我有用……唯一的改变是我将它分组以便于替换。【参考方案2】:

我会用这个:

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

Demo

我处理可选的单引号消息,方法是使用允许这样做或允许不带单引号的消息。

【讨论】:

【参考方案3】:

我的建议是https://regex101.com/r/ntywvP/4

^((?i)raiserror)\s*\d5,6\s*(.+?)(;|\s*)$

捕获以@ 开头的字符串是通过与(.+?) 匹配尽可能少的字符来完成的。这允许在行尾之前的通配符之后指定可能的字符。

^ 匹配行开头 $ 匹配行尾

【讨论】:

【参考方案4】:

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

(?i)raiserror\s*\d5,6\s*@(?:'[^'\r\n]*'|\S+);?

说明

(?i) 不区分大小写的修饰符 raiserror\s*\d5,6\s* 匹配 raiserror 和可选空白字符之间的 5-6 位数字 @匹配@字符 (?: 交替的非捕获组 '[^'\r\n]*' 匹配除 ' 之外的任何字符,在开头和结尾 ' 之间 |或者 \S+ 匹配 1+ 个非空白字符 );?关闭组和匹配可选;

Regex demo

【讨论】:

【参考方案5】:

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

'.' 

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

或者完全匹配四个字符串:

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

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

【讨论】:

以上是关于第一次出现的字符分号或空格或单引号的正则表达式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式用逗号分隔 - 不在括号或单引号内

grep用法详解:grep与正则表达式 [转]

正则表达式:匹配字符的第一次出现

正则表达式:如何检测空格和单引号? [关闭]

String对象及正则表达式

随笔1104