用于检查字符串是否以某个子字符串开头的正则表达式模式?

什么是正则表达式来检查字符串是以“mailto”,“ftp”还是“joe”开头还是……

现在我正在使用C#和类似的代码在一个很大的o中:

String.StartsWith("mailto:") String.StartsWith("ftp") 

看起来像正则表达式会更好。 或者我在这里缺少一种C#方式?

你可以使用:

 ^(mailto|ftp|joe) 

但说实话, StartsWith在这里完全没问题。 您可以按如下方式重写它:

 string[] prefixes = { "http", "mailto", "joe" }; string s = "joe:bloggs"; bool result = prefixes.Any(prefix => s.StartsWith(prefix)); 

如果要解析URI,还可以查看System.Uri类。

以下将匹配以mailtoftphttp开头的任何字符串:

  RegEx reg = new RegEx("^(mailto|ftp|http)"); 

要打破它:

  • ^匹配行的开头
  • (mailto|ftp|http)匹配由|分隔的任何项目

在这种情况下,我会发现StartsWith更具可读性。

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; } } 

如果您只打算检查字符串的开头,我真的建议在Regex.IsMatch上使用String.StartsWith方法。

  • 首先,C#中的正则表达式是一种语言中的语言,无助于理解和代码维护。 正则表达式是一种DSL 。
  • 其次,许多开发人员不理解正则表达式:这是许多人无法理解的东西。
  • 第三,StartsWith方法为您提供了一些function,以启用正则表达式无法识别的文化相关比较。

在您的情况下,只有在计划将来实施更复杂的字符串比较时,才应使用正则表达式。