Regex 正则表达式-是否与可选[]匹配?
我正在尝试进行模式匹配,以便从一个长SQL脚本中剔除具有以下内容的任何地方:Regex 正则表达式-是否与可选[]匹配?,regex,Regex,我正在尝试进行模式匹配,以便从一个长SQL脚本中剔除具有以下内容的任何地方: USE [DBName] USE DBName 我有第一个的正则表达式,但是第二个呢?如何指定[]是可选的,但整行必须匹配 第一个的语法: @"USE \[(.*?)\]" 那么: @"^USE \s ( ([^ \[\] ]+) | (\[ [^ \[\] ]+ \]) )$" ([^\[\]]+)匹配任何非[]字符;(\[^\[\]]+\])与[…]匹配,否则。如何: @"^USE \s ( ([^ \[\]
USE [DBName]
USE DBName
我有第一个的正则表达式,但是第二个呢?如何指定[]
是可选的,但整行必须匹配
第一个的语法:
@"USE \[(.*?)\]"
那么:
@"^USE \s ( ([^ \[\] ]+) | (\[ [^ \[\] ]+ \]) )$"
([^\[\]]+)
匹配任何非[]
字符;(\[^\[\]]+\])
与[…]
匹配,否则。如何:
@"^USE \s ( ([^ \[\] ]+) | (\[ [^ \[\] ]+ \]) )$"
([^\[\]]+)
匹配任何非[]
字符;(\[^\[\]]+\])
与[…]
匹配,否则。您可以使用?
量词:
@"USE \[?(\w+)\]?"
它检查前面的表达式是否为零或一个表达式(同时,您忘记转义“[”和“]”)。您可以使用
?
量词:
@"USE \[?(\w+)\]?"
它检查前面的表达式是否为零或一个表达式(另外,您忘记转义“[”和“]”)。量词表示0或1:
@"USE \[?(.*?)\]?"
这也将匹配
使用[DBName
或使用DBName]
,但由于默认情况下它是贪婪的,所以不会有问题,除非您的SQL脚本中确实有这样的行(在这种情况下,您可能希望它们被剥离:p)。量词表示0或1:
@"USE \[?(.*?)\]?"
这也将匹配使用[DBName
或使用DBName]
,但由于默认情况下它是贪婪的,所以不会有问题,除非您的SQL脚本中确实有这样的行(在这种情况下,您可能希望它们被剥离:p)。不是很漂亮,但至少这不会捕获使用[DBName
或使用DBName]
:
^USE (?=\[\w+\]$|\w+$)\[?(\w+)
不是很漂亮,但至少这不会捕获使用[DBName
或使用DBName]
:
^USE (?=\[\w+\]$|\w+$)\[?(\w+)
那是一个.Net正则表达式吗?你应该添加适当的标记。你应该接受对你帮助最大的答案。那是一个.Net正则表达式吗?你应该添加适当的标记。你应该接受对你帮助最大的答案。这不是
真正的工作方式。你可能想要@“^USE\s([^\[\]+\[^\[\]+\[^\[\]+\]])$”
谢谢大家。当我在文件/字符串中使用我的USE语句时,我肯定是在应用您的所有建议时出错了,因为它无法完全找到匹配项:使用[TestDB],这不是
的真正工作方式。您可能想要@“^USE\s([^\[\]+\[^\[\]+\])$”
谢谢大家。应用您的所有建议时,我一定是做错了什么,因为当我在文件/string中的USE语句为:USE[TestDB]时,它无法完全找到匹配项谢谢大家。应用您的所有建议时,我一定是做错了什么,因为当我在文件/字符串中的USE语句为:USE[TestDB]@Ahmed ilyas时,它无法完全找到匹配项。请检查对答案的编辑。我已将\.*?
(任何字符,不贪婪)更改为\w+?
(至少一个单词字符,不贪婪)。它将匹配任何可能的数据库名称,因为数据库名称不能包含任何非字母、数字或下划线的字符。“any char”部分扭曲了正则表达式。(不要忘记将“不区分大小写”标志添加到正则表达式=)。谢谢大家。应用您的所有建议时,我一定是做错了什么,因为当我在文件/字符串中的USE语句为:USE[TestDB]@Ahmed ilyas时,它无法完全找到匹配项。请检查对答案的编辑。我已将\.*
(任意字符,不贪婪)更改为\w+?
(至少一个单词字符,不贪婪)。它将匹配任何可能的数据库名称,因为数据库名称不能包含任何非字母、数字或下划线的字符。“any char”部分扭曲了正则表达式。(不要忘记将“不区分大小写”标志添加到正则表达式=)。