C# C中的Like运算符的替代方法是什么?
问:我想将字符串与具有通配符*和?)的模式匹配?。我知道在VB.Net中,我可以用Like运算符来实现这一点,但在C中如何实现呢 VB中的示例:C# C中的Like运算符的替代方法是什么?,c#,C#,问:我想将字符串与具有通配符*和?)的模式匹配?。我知道在VB.Net中,我可以用Like运算符来实现这一点,但在C中如何实现呢 VB中的示例: Private Sub Match() Dim testCheck As Boolean testCheck = "apple" Like "*p?e" End Sub 问:C代码 在c中没有这样的操作符 VB.NET将代码编译为以下方法调用: bool testCheck = LikeOperator.LikeString("app
Private Sub Match()
Dim testCheck As Boolean
testCheck = "apple" Like "*p?e"
End Sub
问:C代码 在c中没有这样的操作符 VB.NET将代码编译为以下方法调用:
bool testCheck = LikeOperator.LikeString("apple", "*p?e", CompareMethod.Binary);
如果添加对Microsoft.VisualBasic.dll的引用并使用Microsoft.VisualBasic.CompilerServices添加,则可以直接调用此方法,但我不建议这样做
您可能应该学习正则表达式并使用适当的正则表达式,而不是Like运算符。与您的表达相同的是:
.*p.e
在c中没有这样的运算符 VB.NET将代码编译为以下方法调用:
bool testCheck = LikeOperator.LikeString("apple", "*p?e", CompareMethod.Binary);
如果添加对Microsoft.VisualBasic.dll的引用并使用Microsoft.VisualBasic.CompilerServices添加,则可以直接调用此方法,但我不建议这样做
您可能应该学习正则表达式并使用适当的正则表达式,而不是Like运算符。与您的表达相同的是:
.*p.e
C语言中没有类似的语言。使用正则表达式可以获得所需的功能
您可能希望从本简介教程开始:C中没有类似的内容。使用正则表达式可以获得所需的功能
您可能希望从本简介教程开始:在C中,您可以使用正则表达式:
bool matches = Regex.IsMatch("apple", ".*p.e");
替换:
*带。*多个字符,零个或多个
??具有一个字符在C中,可以使用正则表达式:
bool matches = Regex.IsMatch("apple", ".*p.e");
Regex.IsMatch("apple", "*p?e")
替换:
*带。*多个字符,零个或多个
??具有一个字符
Regex.IsMatch("apple", "*p?e")
对于简单的模式匹配:
string.Contains()
对于简单的模式匹配:
string.Contains()
正如其他人指出的,这可能是正则表达式的工作 尽管如此,我认为编写一个实现此逻辑的小型扩展方法可能会很有趣,并得出以下结论:
static class StringCompareExtensions
{
public static bool IsLike(this string s, string s2)
{
int matched = 0;
for (int i = 0; i < s2.Length; i++)
{
if (matched >= s.Length)
return false;
char c = s2[i];
if (c == '?')
matched++;
else if (c == '*')
{
if ((i + 1) < s2.Length)
{
char next = s2[i + 1];
int j = s.IndexOf(next, matched + 1);
if (j < 0)
return false;
matched = j;
}
else break; // '*' matches rest of s
}
else
{
if (c != s[matched])
return false;
matched++;
}
}
return (matched == s.Length);
}
}
当然,您可以使用正则表达式编写相同的方法,这将比上面的方法更短、更简单
编辑:
今天我有点时间玩这个。我最后写了一篇文章,介绍了几种从C获得Like操作符功能的方法。这篇文章是。正如其他人所指出的,这可能是正则表达式的工作 尽管如此,我认为编写一个实现此逻辑的小型扩展方法可能会很有趣,并得出以下结论:
static class StringCompareExtensions
{
public static bool IsLike(this string s, string s2)
{
int matched = 0;
for (int i = 0; i < s2.Length; i++)
{
if (matched >= s.Length)
return false;
char c = s2[i];
if (c == '?')
matched++;
else if (c == '*')
{
if ((i + 1) < s2.Length)
{
char next = s2[i + 1];
int j = s.IndexOf(next, matched + 1);
if (j < 0)
return false;
matched = j;
}
else break; // '*' matches rest of s
}
else
{
if (c != s[matched])
return false;
matched++;
}
}
return (matched == s.Length);
}
}
当然,您可以使用正则表达式编写相同的方法,这将比上面的方法更短、更简单
编辑:
今天我有点时间玩这个。我最后写了一篇文章,介绍了几种从C获得Like运算符功能的方法。这篇文章是。您可能必须在CY中使用正则表达式。您可能必须在C中使用正则表达式。此正则表达式与问题中的表达式不同。此正则表达式与问题中的表达式。为什么不建议使用LikeOperator.LikeString?你能提供更多的信息吗?谢谢为什么你不建议使用LikeOperator.LikeString?你能提供更多的信息吗?谢谢伙计。。。令人惊叹的我喜欢这个。现在查看你的文章…哥们。。。令人惊叹的我喜欢这个。正在签出您的文章。。。。。