Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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#regex需要在\player\n之后加上字符\_C#_Regex - Fatal编程技术网

C#regex需要在\player\n之后加上字符\

C#regex需要在\player\n之后加上字符\,c#,regex,C#,Regex,我需要一个正则表达式模式,它将容纳以下内容 我从UDP服务器得到一个响应,它是一个很长的字符串,每个单词由\分隔,例如: \g79g97\g879o\wot87gord\player_0\name0\g6868o\g78og89\g79g79\player_1\name1\gyuvui\yivyil\player_2\name2\g7g87\g67og9o\v78v9i7 我需要\player\u n\后面的字符串,因此在上面的示例中,我需要name0、name1和name3 我知道这是今天的

我需要一个正则表达式模式,它将容纳以下内容

我从UDP服务器得到一个响应,它是一个很长的字符串,每个单词由
\
分隔,例如:

\g79g97\g879o\wot87gord\player_0\name0\g6868o\g78og89\g79g79\player_1\name1\gyuvui\yivyil\player_2\name2\g7g87\g67og9o\v78v9i7
我需要
\player\u n\
后面的字符串,因此在上面的示例中,我需要
name0
name1
name3

我知道这是今天的第二个正则表达式问题,但我已经订购了这本书(掌握正则表达式)!多谢各位

更新。Ellusive的正则表达式模式就足够了,我可以将匹配项(0)添加到文本框中。但是,如果要将所有匹配项添加到文本框中,该怎么办

textBox1.Text += match.Captures[0].ToString(); //this works fine.
如何将“所有”匹配捕获添加到文本框中It’很抱歉,这个正则表达式类对我来说是全新的。

试试这个:

\\player_\d+\\([^\\]+)
试试这个:

\\player_\d+\\([^\\]+)

要仅获取玩家名称,您可以使用:

(?<=\\player_\d+\\)[^\\]+

(?要仅获取玩家姓名,您可以使用:

(?<=\\player_\d+\\)[^\\]+

(?我认为这个测试示例可以帮助您

string inp = @"\g79g97\g879o\wot87gord\player_0\name0\g6868o\g78og89\g79g79\player_1\name1\gyuvui\yivyil\player_2\name2\g7g87\g67og9o\v78v9i7";
string rex = @"[\w]*[\\]player_[0-9]+[\\](?<name>[A-Za-z0-9]*)\b";
Regex re = new Regex(rex);
Match mat = re.Match(inp);
 for (Match m = re.Match(inp); m.Success; m = m.NextMatch())
{
     Console.WriteLine(m.Groups["name"]);
}
string inp=@“\g79g97\g879o\wot87gord\player\u 0\name0\g6868o\g78og89\g79g79\player\u 1\name1\gyuvui\yivyil\player\u 2\name2\g7g87\g67og9o\v78v9i7”;
字符串rex=@“[\w]*[\\]player\[0-9]+[\\](?[A-Za-z0-9]*)\b”;
正则表达式re=新正则表达式(rex);
匹配材料=重新匹配(inp);
for(Match m=re.Match(inp);m.Success;m=m.NextMatch())
{
Console.WriteLine(m.Groups[“name”]);
}

您可以从
m.Groups[“name”]

中获取玩家的姓名,我认为这个测试示例可以帮助您

string inp = @"\g79g97\g879o\wot87gord\player_0\name0\g6868o\g78og89\g79g79\player_1\name1\gyuvui\yivyil\player_2\name2\g7g87\g67og9o\v78v9i7";
string rex = @"[\w]*[\\]player_[0-9]+[\\](?<name>[A-Za-z0-9]*)\b";
Regex re = new Regex(rex);
Match mat = re.Match(inp);
 for (Match m = re.Match(inp); m.Success; m = m.NextMatch())
{
     Console.WriteLine(m.Groups["name"]);
}
string inp=@“\g79g97\g879o\wot87gord\player\u 0\name0\g6868o\g78og89\g79g79\player\u 1\name1\gyuvui\yivyil\player\u 2\name2\g7g87\g67og9o\v78v9i7”;
字符串rex=@“[\w]*[\\]player\[0-9]+[\\](?[A-Za-z0-9]*)\b”;
正则表达式re=新正则表达式(rex);
匹配材料=重新匹配(inp);
for(Match m=re.Match(inp);m.Success;m=m.NextMatch())
{
Console.WriteLine(m.Groups[“name”]);
}

您可以从
m.Groups[“name”]中获取玩家的姓名

+1--提示:对于正则表达式,最好在没有特定语言添加的情况下发布纯表达式。就像在本例中,正则表达式文字符号
/slashes/
在C#中没有意义。感谢您的添加!我在Perl中使用了它们,所以分隔符对我来说似乎很自然。它不起作用,但如果我在每一端的“/”上,我得到一个匹配“\player\n\playername\”。这是可以的,但我更喜欢“playername”本身。您需要使用第一个匹配组。我不知道这在C中是如何工作的,但这在了解正则表达式的任何其他语言中都不太难。@brux:请参阅以获得快速概述(这里也解释了如何处理组).1--提示:对于正则表达式,最好在不添加特定语言的情况下发布纯表达式。就像在本例中,正则表达式的文字符号
/slashes/
在C#中没有意义。感谢您的添加!我一生都在Perl中使用它们,因此分隔符对我来说似乎很自然。它不起作用,但如果我删除“/”从每一端,我得到一个匹配项“\player\n\playername\”。这是可以的,但我更喜欢它自己的“playername”。您需要使用第一个匹配组。我不知道这在C中是如何工作的,但这在任何了解正则表达式的其他语言中都不太难。@brux:请参阅以快速了解概况(这里也解释了如何处理组)。嗨,tomolak,我使用的是Elquive发布的正则表达式,因为它工作正常。但是如果我尝试将第二个匹配添加到文本框,我会得到一个“超出范围错误”。如果我删除该行,第一个匹配(0)添加正确。在与模式比较的字符串中,大约有8个playername:s@brux:如果你出现“超出范围”的错误,那你就是做错了。总是在代码中进行范围检查。嗨,tomolak,我使用的是Elquive发布的正则表达式,因为它工作正常。但是如果我尝试将第二个匹配添加到文本框中,我会得到一个“超出范围错误”。如果删除该行,则添加第一个匹配项(0)。在与模式比较的字符串中,大约有8个playernames:s@brux:如果出现“超出范围”的错误,则无论如何都是错误的。请始终在代码中进行范围检查。