使用正则表达式忽略大小写

3

我在SQL Server 2005数据库中创建了一个CLR。它是一个简单的正则表达式用户定义函数,用于检查我传递给函数的字符串中是否存在某种模式。

下面是我在CLR中使用的.NET代码:

Return System.Text.RegularExpressions.Regex.IsMatch("Input", "pattern")

如果找到了匹配项,这将返回一个值为1的位。

我正在使用的模式是

 +(Create|Alter) +(Proc|Procedure) +

我希望这能找到任何“create or alter”、“procedure or proc”字样,不论大小写。如何使表达式忽略大小写呢?

我尝试过:

/ +(Create|Alter) +(Proc|Procedure) +/i 

但这并不起作用。

编辑:我在互联网上寻找并使用了各种建议。 没有一个有效或者我做错了。 如果有人能给我一个忽略大小写的模式,那将不胜感激!

答案:我想实现的是一个忽略大小写的正则表达式。Dot Net确实有可以传递参数以设置忽略大小写的方法,但它在CLR中,意味着我无法将参数传递到函数中。

实现这个功能的模式是:(?i) +(Create|Alter) +(Proc|Procedure) +

3个回答

3

试一试。

Return System.Text.RegularExpressions.Regex.IsMatch("input", @".*(Create|Alter).+(Proc|Procedure).+", RegexOptions.IgnoreCase);

我建议安装免费软件Expresso来测试您的正则表达式,并生成用于搜索、替换等操作的.NET / C#代码。

@jcasso:不确定您对无关评论的赞赏是否值得一票。;-) - Tomalak
@Tomalak:提问者在创建正则表达式时遇到了问题。如果他使用Expresso,他会注意到有一个“IgnoreCase”选项。不点赞是否意味着它没有用? - JCasso

3
你可以使用内联的“不区分大小写”修饰符 (?i)
(?i) +(创建|更改) +(存储过程|存储过程) +

这个 (?i) 和 + 之间的空格是用来查找空格吗? - Greg
1
那个空格是原始模式的一部分 - 所以我没有改动它。 - Tomalak
这正是我在寻找的,谢谢!已测试并可行!空格和 + 表示在 Create 或 Alter 之前可以有任意数量的空格。 - MarcoF
严格来说,它的意思是“至少一个空格”。在这些情况下,我倾向于使用\s*\s+,因为a)对人眼更容易识别,b)它还可以捕获其他类型的空白。 - Tomalak

2

尝试使用以下方法:

Regex regex = new Regex(
    regexStringHere,
    RegexOptions.IgnoreCase);

return regex.IsMatch(inputStringHere);

希望这能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接