第一次出现的字符分号或空格或单引号的正则表达式[关闭]
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'
您还没有为要匹配的字符串和不匹配的字符串指定规则。任何其他解决方案都需要猜测您的意思意思但没有解释。
【讨论】:
以上是关于第一次出现的字符分号或空格或单引号的正则表达式[关闭]的主要内容,如果未能解决你的问题,请参考以下文章