Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查多个正则表达式模式的字符串_C#_Regex - Fatal编程技术网

C# 检查多个正则表达式模式的字符串

C# 检查多个正则表达式模式的字符串,c#,regex,C#,Regex,我目前正在尝试对一个字符串运行两种不同的正则表达式模式,以比较该字符串是myspace.com还是使用C#的last.fm url 我使用一个带有以下代码的正则表达式来实现它: public string check(string value) { Regex DescRegexShortened = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)"); Match DescRegexShortenedMatch = DescRegexSho

我目前正在尝试对一个字符串运行两种不同的正则表达式模式,以比较该字符串是myspace.com还是使用C#的last.fm url

我使用一个带有以下代码的正则表达式来实现它:

public string check(string value)
{
    Regex DescRegexShortened = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)");
    Match DescRegexShortenedMatch = DescRegexShortened.Match(value);

    string url = "";

    if (DescRegexShortenedMatch.Success)
    {
        url = DescRegexShortenedMatch.Value;
    }

    return url;
}
现在我的问题是,有没有更简单的方法来检查字符串是myspace.com还是last.fm url

Regex DescRegexShortened = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)");
Regex mySpaceRegex = new Regex(@"last\.fm\/([a-zA-Z0-9_-]*)");
例如:


如果字符串匹配regex1或regex2,那么…

这可能太明显了:

var rx1 = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)");
var rx2 = new Regex(@"last\.fm\/([a-zA-Z0-9_-]*)");

if ( rx1.IsMatch(value) || rx2.IsMatch(value) )
{
    // Do something.
}

这可能太明显了:

var rx1 = new Regex(@"myspace\.com\/([a-zA-Z0-9_-]*)");
var rx2 = new Regex(@"last\.fm\/([a-zA-Z0-9_-]*)");

if ( rx1.IsMatch(value) || rx2.IsMatch(value) )
{
    // Do something.
}

您可以在正则表达式中使用交替来检查不同的值,而不是检查多个正则表达式:

var regex = new Regex(@"(?<domain>myspace\.com|last\.fm)/[a-zA-Z0-9_-]*");
var match = regex.Match(value);
if (match.Success)
{
    var domain = match.Groups["domain"].Value;
    // ...
}
else
{
    // No match
}
var regex=new regex(@“(?myspace\.com|last\.fm)/[a-zA-Z0-9_-]*”;
var match=regex.match(值);
如果(匹配成功)
{
var domain=match.Groups[“domain”].Value;
// ...
}
其他的
{
//没有对手
}
在这种情况下,可选的是
myspace\.com | last\.fm
,它与
myspace.com
last.fm
匹配。替代项位于命名组
中,若正则表达式匹配,您可以像在代码中一样访问该命名组的值

不使用正则表达式,您可以只检查字符串是否以
myspace.com
last.fm
开头,或者URL是否是真正的URL,使用适当的语法,如
http://myspace.com/bla
您可以创建
Uri
类的实例,然后检查
Host
属性


如果您想使用正则表达式,您可能应该将其更改为不匹配域,如
fakemyspace.com
,但仍然匹配
MYSPACE.com

您可以在正则表达式中使用交替来检查不同的值,而不是检查多个正则表达式:

var regex = new Regex(@"(?<domain>myspace\.com|last\.fm)/[a-zA-Z0-9_-]*");
var match = regex.Match(value);
if (match.Success)
{
    var domain = match.Groups["domain"].Value;
    // ...
}
else
{
    // No match
}
var regex=new regex(@“(?myspace\.com|last\.fm)/[a-zA-Z0-9_-]*”;
var match=regex.match(值);
如果(匹配成功)
{
var domain=match.Groups[“domain”].Value;
// ...
}
其他的
{
//没有对手
}
在这种情况下,可选的是
myspace\.com | last\.fm
,它与
myspace.com
last.fm
匹配。替代项位于命名组
中,若正则表达式匹配,您可以像在代码中一样访问该命名组的值

不使用正则表达式,您可以只检查字符串是否以
myspace.com
last.fm
开头,或者URL是否是真正的URL,使用适当的语法,如
http://myspace.com/bla
您可以创建
Uri
类的实例,然后检查
Host
属性


如果您想使用正则表达式,您可能应该将其更改为不匹配域,如
fakemyspace.com
,但仍然匹配
MYSPACE.com

,看起来您只关心最后一个.fm或MYSPACE.com,而不关心后面的内容。您能不能不使用正则表达式模式而只使用string.StartsWith或string.Contains?或者您的情况通常需要正则表达式?您的正则表达式在myspace.com上失败?a=b
。Michael是正确的。我目前正在将包含用户名的文本文档上载到应用程序。现在,应用程序将使用API来接收twitter用户的简历和网站。现在,每个网站都将被添加到一个C#列表中,并将通过这两个正则表达式模式运行,检查url是myspace还是last.fm url,因此它背后的用户名与您描述它的方式无关,您可以使用
if(value.Contains(“myspace.com/”)| value.Contains(“last.fm/”)
哦,上帝。非常感谢。我没想过。看起来你只关心last.fm或myspace.com,而不关心那之后会发生什么。您能不能不使用正则表达式模式而只使用string.StartsWith或string.Contains?或者您的情况通常需要正则表达式?您的正则表达式在myspace.com上失败?a=b
。Michael是正确的。我目前正在将包含用户名的文本文档上载到应用程序。现在,应用程序将使用API来接收twitter用户的简历和网站。现在,每个网站都将被添加到一个C#列表中,并将通过这两个正则表达式模式运行,检查url是myspace还是last.fm url,因此它背后的用户名与您描述它的方式无关,您可以使用
if(value.Contains(“myspace.com/”)| value.Contains(“last.fm/”)
哦,上帝。非常感谢。我没想过。开头的单词边界是在这里使用正则表达式的更好借口。开头的单词边界是在这里使用正则表达式的更好借口。