Microsoft.VisualBasic.LikeOperator.LikeString特殊字符模式匹配失效求助
解决LikeOperator.LikeString模式匹配不生效的问题
我来帮你理清问题所在,你现在的核心问题是混淆了LikeOperator里的通配符规则和字面字符的处理方式,还错误地用()来尝试转义*——这可不是Like语法的正确转义方式哦。
先拆解你的问题
你的目标字符串是*test*/fe_quet,如果这里的*是字面字符(也就是你真的想匹配这个*符号),那你写的原模式(*)test(*)/*肯定不对,因为(和)在Like语法里是普通字面字符,模式里的(*)会被解析为「匹配一个(,然后任意长度的字符,再匹配一个)」,但你的目标字符串里根本没有(和),自然返回false。
下面分两种常见场景给你正确的模式:
场景1:需要匹配**字面的*test*/**开头的字符串
如果你的需求是精准匹配开头为*test*(这里的*是固定符号),后面跟着/和任意内容,那要把字面的*用方括号[]包裹起来(Like语法里用[]来转义特殊通配符),正确代码如下:
bool match = LikeOperator.LikeString("*test*/fe_quet", "[*]test[*]/*", Microsoft.VisualBasic.CompareMethod.Text);
这里的[*]会被当作字面的*字符匹配,后面的*是通配符,用来匹配/之后的所有内容,执行后会返回true。
场景2:只需匹配**包含test且后面带有/**的任意字符串
如果你的需求更宽泛——只要字符串里有test,且test之后出现/就匹配(不管test前后是什么字符,包括字面*),那直接用通配符*就可以,模式更简洁:
bool match = LikeOperator.LikeString("*test*/fe_quet", "*test*/*", Microsoft.VisualBasic.CompareMethod.Text);
这个模式里的*是通配符,会匹配任意长度的任意字符(包括字面*),完全能覆盖你的目标字符串,执行后也会返回true。
补充:LikeOperator的特殊字符处理规则
记住,在Like语法里,这些字符是特殊通配符:*、?、#、[,如果你想匹配它们的字面形式,必须把它们放在[]里,比如:
- 匹配字面
*→[*] - 匹配字面
?→[?] - 匹配字面
[→[[]
内容的提问来源于stack exchange,提问作者jithu
相关产品推荐
相关产品推荐

