C# C中的Like运算符的替代方法是什么?

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

问:我想将字符串与具有通配符*和?)的模式匹配?。我知道在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("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?你能提供更多的信息吗?谢谢伙计。。。令人惊叹的我喜欢这个。现在查看你的文章…哥们。。。令人惊叹的我喜欢这个。正在签出您的文章。。。。。