Ошибка регулярного выражения c #? - PullRequest
0 голосов
/ 22 февраля 2009

Как я могу использовать "/show_name=(.?)&show_name_exact=true\">(.?)

    Match m = Regex.Match(input, "/show_name=(.*?)&amp;show_name_exact=true\">(.*?)</i", RegexOptions.IgnoreCase);
   // Check Match instance
    if (m.Success)
    {
        // Get Group value
        string key = m.Groups[1].Value;
        Console.WriteLine(key);
        // alternate-1
    }

Ошибка, неопределенный строковый литерал (CS1039)] Ошибка, новая строка в константе (CS1010)]

Что я делаю не так?

1 Ответ

3 голосов
/ 23 февраля 2009

Я думаю, вы смешиваете синтаксис регулярных выражений .NET с PHP. PHP требует, чтобы вы использовали разделитель регулярных выражений в дополнение к кавычкам, которые требуются строковому литералу C #. Например, если вы хотите сопоставлять «foo» без учета регистра в PHP, вы должны использовать что-то вроде этого:

'/foo/i'

... но C # не требует дополнительных разделителей регулярных выражений, что означает, что он не поддерживает стиль / i для добавления модификаторов соответствия (это было бы в любом случае избыточно, так как вы также используете RegexOptions.IgnoreCase флаг). Я думаю, это то, что вы ищете:

@"show_name=(.*?)&amp;show_name_exact=true"">(.*?)<"

Обратите внимание, как я избежал внутренней кавычки, используя другую кавычку вместо обратной косой черты. Вы должны сделать это таким образом, используете ли вы старомодный строковый литеральный синтаксис или дословные строки C # с начальным '@' (что настоятельно рекомендуется для написания регулярных выражений). Вот почему вы получили неопределенную строковую ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...