Могу ли я определить в C # оператор привязки, подобный Perl (= ~)?

Мне очень нравится возможность использовать = ~ и! ~ В Perl для оценки строки по регулярному выражению. Я хотел бы перенести эту функциональность на C #, но похоже, что, хотя вы можете перегружать операторы, вы не можете создавать новые.

Я рассматриваю возможность расширения строкового типа для предоставления метода Match (), который позволит мне передать регулярное выражение для оценки, но мне интересно, есть ли способ лучше.

У кого-нибудь есть лучшее решение?


person Tequila Jinx    schedule 07.02.2009    source источник


Ответы (2)


Попробуйте создать метод расширения для строкового класса, который действует как «ярлык» для Regex.Match. Что-то вроде этого:

public static class RegexExtensions
{
    public static bool Match(this string text, Regex re)
    {
        return Regex.Match(text, re);
    }
}
person R. Martinho Fernandes    schedule 07.02.2009
comment
Да, это то, что я имел в виду. Мне бы очень хотелось иметь возможность создавать новых операторов, возможно, мы увидим эту функциональность в следующем выпуске .Net. - person Tequila Jinx; 10.02.2009

По моему опыту, .NET поддерживает те же функции, что и регулярные выражения Perl, но синтаксис намного более подробный, поэтому к нему нужно немного привыкнуть.

C # не поддерживает концепцию неявных переменных, поэтому вам всегда нужно указывать как входную строку, так и шаблон соответствия. Другими словами, это сокращение, которое отсутствует в .NET, а не явное сопоставление через = ~ и! ~.

Regex.Match делает то же самое, что и = ~, если вы просто хотите найти совпадения. Если вы хотите сопоставить и заменить, вы должны использовать метод Replace. Для оператора! ~ Вам просто нужно использовать! и соответствующий метод Regex.

Это займет немного больше времени, но вы сможете добиться желаемого эффекта.

person Brian Rasmussen    schedule 07.02.2009