Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式-是否与可选[]匹配?_Regex - Fatal编程技术网

Regex 正则表达式-是否与可选[]匹配?

Regex 正则表达式-是否与可选[]匹配?,regex,Regex,我正在尝试进行模式匹配,以便从一个长SQL脚本中剔除具有以下内容的任何地方: USE [DBName] USE DBName 我有第一个的正则表达式,但是第二个呢?如何指定[]是可选的,但整行必须匹配 第一个的语法: @"USE \[(.*?)\]" 那么: @"^USE \s ( ([^ \[\] ]+) | (\[ [^ \[\] ]+ \]) )$" ([^\[\]]+)匹配任何非[]字符;(\[^\[\]]+\])与[…]匹配,否则。如何: @"^USE \s ( ([^ \[\]

我正在尝试进行模式匹配,以便从一个长SQL脚本中剔除具有以下内容的任何地方:

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”部分扭曲了正则表达式。(不要忘记将“不区分大小写”标志添加到正则表达式=)。