在运行时与 VB.NET LIKE 运算符进行大小写(不)敏感比较(无选项比较)

Posted

技术标签:

【中文标题】在运行时与 VB.NET LIKE 运算符进行大小写(不)敏感比较(无选项比较)【英文标题】:Case (in)sensitive comparison with VB.NET LIKE operator in runtime (without Option Compare) 【发布时间】:2011-06-24 23:28:18 【问题描述】:

在运行时是否可以在 VB.NET 中使用 LIKE 运算符区分大小写或不区分大小写?例如,使用标志进行区分大小写或不区分大小写的比较。

显然,这可以通过简单地将它们转换为小写并强制应用程序为Option Compare Binary 来完成,但也许有更好的方法来做到这一点?

【问题讨论】:

【参考方案1】:

我不这么认为。但是,如果不区分大小写很重要,您可能无论如何都不应该使用 Like 运算符 - 而是使用正则表达式。

Dim re As New System.Text.RegularExpressions.Regex("^.+ough$", System.Text.RegularExpressions.RegexOptions.IgnoreCase)

re.IsMatch("rough") ' True
re.IsMatch("tough") ' True
re.IsMatch("rOUGH") ' True
re.IsMatch("ough")  ' False

要学的东西很多,但基本上.等价于?.*等价于*\d等价于#。您也必须将其包装在 ^$ 中以获得等效性。正则表达式功能更强大,可以满足您的需求。

如果您打算大量使用它们,您可能应该添加Imports System.Text.RegularExpressions。它们也可以被编译和重用以提高效率。

【讨论】:

这就是我不需要太强大的问题,我需要更少的强大:) @dr. evil:你能给我们举一个有问题的模式的例子吗?它将在什么情况下使用? 它将由用户输入,因为普通用户无法编写正则表达式,将通配符转换为正则表达式会很脏,但仍然可行。 @dr.邪恶的:不是真的;我在网上找到了一篇关于在 C# 中使用 Like 的文章,您可以应用相同的原则。只需将*?# 替换掉,然后将其包围在^$ 中。听起来确实很复杂,但这里有一个为你准备好的(如果你不懂 C#,还有一个在线转换工具):social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/… @minitech 是的,这就是方法,但我想你也知道 LIKE 语法不仅仅是 * 和 ?​​span> 【参考方案2】:

即使默认设置为Compare Binary(区分大小写),您也可以提供自定义类以确保获得不区分大小写的比较。您可以在代码文件中指定Option Compare

Option Compare Text

Public Class CaseInsensitiveLikeOperator
    Public Shared Function IsLike(str As String, pattern As String) As Boolean
        Return str Like pattern
    End Function
End Class

现在可以了:

Dim isSame = CaseInsensitiveLikeOperator.IsLike("foo", "Fo?") ' True

如果您的默认值是Option Compare Text,您可以提供两个类以确保安全。

也许最好的选择是学习正则表达式 ;-)

【讨论】:

以上是关于在运行时与 VB.NET LIKE 运算符进行大小写(不)敏感比较(无选项比较)的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 的 LIKE 运算符是不是区分大小写?

MySQL中的Like和正则表达

mysql模糊查询区分大小写

VB.NET SQL 日期比较

LIKE运算符是否与MSSQL Server区分大小写?

vb.net 有没有++(增1)和--(减1)运算符?