like运算符很好用,特别是它所提供的其中*、?这两种通配符,在windows文件系统和各类项目中运用非常广泛。
但like运算符仅在vb中支持,在c#中,如何实现呢?
以下是关于likestring的四种实现方式,其中第四种为regex正则表达式实现,且在.net standard 2.0及以上平台支持。
-
operators.likestring 方法
方法描述:表示 visual basic 的 like 运算符,对给定的两个字符串执行二进制字符串或文本字符串比较。
平台兼容性:该方法由microsoft.visualbasic.dll库提供,仅在.net framework平台下支持。
参考链接:
源码链接:无 -
likeoperator.likestring 方法
方法描述:对给定的两个字符串执行二进制字符串或文本字符串比较。
平台兼容性:该方法由microsoft.visualbasic.core.dll提供,在.net framework和.net core 3.0 以上平台都支持。
参考链接:
源码链接: -
filesystemname.matchessimpleexpression 方法
方法描述:验证给定表达式是否与给定名称匹配。支持以下通配符:“*”and“?”。反斜杠字符“\”将转义。
平台兼容性:该方法由system.private.corelib.dll提供,在.net standard 2.1和.net core 2.1 以上平台都支持。
参考链接:
源码链接: -
regexlikeoperator.likestring 方法
方法描述:使用正则表达式,模仿likeoperator.likestring方法,实现字符串的通配符匹配,持*和?通配符,支持忽略大小写匹配。
平台兼容性:该方法由github copilot实现,在.net standard 1.0和.net framework 1.1 以上以及.net core 1.0 以上平台都支持。
源码实现:
///
/// 使用正则表达式,模仿microsoft.visualbasic.compilerservices.likeoperator.likestring方法,实现字符串的通配符匹配
///
public static class regexlikeoperator
{
///
/// 使用正则表达式,模仿microsoft.visualbasic.compilerservices.likeoperator.likestring方法,实现字符串的通配符匹配。
/// 支持*和?通配符,支持忽略大小写匹配。
///
/// 文本内容
/// 通配符
/// 是否忽略大小写匹配
///
///
/// 经过benchmark性能测试,本方法相比microsoft.visualbasic.compilerservices.likeoperator.likestring方法,
/// 在执行性能上,表现较差,
/// 在内存分配上,表现优秀。
/// 忽略大小写匹配后,执行性能比不忽略大小写匹配的要好。
///
public static bool likestring(string? content, string? pattern, bool ignorecase = true)
{
if (content == null && pattern == null)
return true;
if (content == null || pattern == null)
return false;
string regexpattern = "^" regex.escape(pattern).replace("\\*", ".*").replace("\\?", ".") "$";
regexoptions options = ignorecase ? regexoptions.ignorecase : regexoptions.none;
return regex.ismatch(content, regexpattern, options);
}
}
like 运算符介绍:
附上benchmark性能测试代码:
using benchmarkdotnet.attributes;
using benchmarkdotnet.jobs;
using microsoft.visualbasic;
using microsoft.visualbasic.compilerservices;
using system.collections.generic;
using system.text.regularexpressions;
using system.io.enumeration;
namespace performancetest.benchmarkdotnet;
[simplejob(runtimemoniker.net80)]
[memorydiagnoser, memoryrandomization]
public class likestringtest
{
public static ienumerable
作者:
出处:
本文kb88凯时官网登录的版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。