在运行时与 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 运算符进行大小写(不)敏感比较(无选项比较)的主要内容,如果未能解决你的问题,请参考以下文章