Как использовать string.StartsWith(), когда у меня есть только некоторые части строки сравнения?

Я работаю с IRC-протоколом, и я пытаюсь интерпретировать сообщения сервера. Если я, например, получил следующую строку:

": USERNAME! ~ IP PRIVMSG #CHANNELNAME: MESSAGE"

Как я могу использовать string.StartsWith, если я не знаю переменные: USERNAME, IP, CHANNELNAME или MESSAGE?

Я хотел бы сделать что-то вроде этого: (Я знаю, что это не работает)

if(MessageString.StartsWith(":*!~* PRIVMSG #*"))
4 ответа

Я бы не использовал StartsWith. Я предлагаю проанализировать строку, например, разбивая ее на токены. Таким образом, вы можете проверить, что строка PrivMsg содержится в списке токенов.

Возможно, библиотеки уже готовы анализировать сообщения IRC. Вы проверили https://launchpad.net/ircdotnet?


Вы можете попробовать использовать регулярные выражения:

http://msdn.microsoft.com/en-us/library/az24scfc.aspx

// Check this regular expression: 
 // I've tried to reconstruct it from wild card in the question 
 Regex regex = new Regex(@":.*\!~.* PRIVMSG \#.*");

 Match m = regex.Match(":USERNAME!~IP PRIVMSG #CHANNELNAME :MESSAGE");

 if (m.Success) {
 int startWith = m.Index;
 int length = m.Length;
 ...
 }


Попробуйте что-то подобное, используя класс Regex.

var regex = new Regex(
 @":(?<username>[^!]+)!~(?<ip>[^ ]+) PRIVMSG #(?<therest>[\s\S]+)");
var match = regex.Match(MessageString);
if (match.Success)
{
 var userName = match.Groups["userName"].Value;
 var ip = match.Groups["ip"].Value;
 var theRest = match.Groups["theRest"].Value;

 // do whatever
}
</therest></ip></username>

Я также хотел бы взглянуть на страницу MSDN для регулярных выражений в.Net.


Попробуйте использовать разделитель после слов, которые вы не знаете, и проанализируйте строку из основной, содержащей только сообщение.

licensed under cc by-sa 3.0 with attribution.