Что является регулярным выражением, чтобы проверить, запускается ли строка с "mailto" или "ftp" или "joe" или...
Теперь я использую C# и код как это в большом вопросе со многими ors:
String.StartsWith("mailto:")
String.StartsWith("ftp")
Похоже, что regex был бы лучше для этого. Или есть ли способ C#, которым я отсутствую здесь?
Вы можете использовать:
^(mailto|ftp|joe)
Но, честно говоря, StartsWith
здесь вполне подходит. Вы можете переписать это следующим образом:
string[] prefixes = { "http", "mailto", "joe" };
string s = "joe:bloggs";
bool result = prefixes.Any(prefix => s.StartsWith(prefix));
Вы также можете посмотреть на класс System.Uri
если вы разбираете URI.
Я действительно рекомендую использовать String .StartsWith над Regex.IsMatch, если вы планируете проверять только начало строки.
В вашем случае вам следует использовать регулярные выражения только в том случае, если вы планируете реализовать более сложное сравнение строк в будущем.
Метод StartsWith будет быстрее, поскольку нет накладных расходов на интерпретацию регулярного выражения, но вот как это делается:
if (Regex.IsMatch(theString, "^(mailto|ftp|joe):")) ...
Символ ^
обозначает начало строки. Между круглыми скобками можно поместить любые протоколы, разделенные символами |
.
Другой подход, который намного быстрее, заключается в получении начала строки и использовании его в переключателе. Переключатель создает хэш-таблицу со строками, так что это быстрее, чем сравнивать все строки:
int index = theString.IndexOf(':');
if (index != -1) {
switch (theString.Substring(0, index)) {
case "mailto":
case "ftp":
case "joe":
// do something
break;
}
}
Следующее будет соответствовать любой строке, которая начинается с mailto
, ftp
или http
:
RegEx reg = new RegEx("^(mailto|ftp|http)");
Чтобы разбить это на части:
^
соответствует началу строки(mailto|ftp|http)
соответствует любому из элементов, разделенных |
Я бы нашел StartsWith
более читаемым в этом случае.