如何确保字符串匹配某种格式?

Afn*_*hir 1 c# regex

如何检查字符串是否与某种格式匹配?例如,如何检查字符串是否与IP地址,代理地址(或任何自定义格式)的格式匹配?

我找到了这段代码,但我无法理解它的作用.请帮我理解匹配字符串创建过程.

string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.
    ([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$";
            //create our Regular Expression object
Run Code Online (Sandbox Code Playgroud)

shy*_*cha 14

正则表达式匹配变得简单:

Regex r = new Regex(@"your_regexp");

if (r.Match(whatever).Success)
{
  // Do_something
}
Run Code Online (Sandbox Code Playgroud)

如果whatever字符串匹配you_regexp正则表达式,此代码将调用某些操作.

那么它们是什么,这些正则表达式(与正则表达式正则表达式的缩写相同)?它们只是字符串模式,旨在用作其他字符串的过滤器.

假设您有很多HTTP标头,并且您只想获得GET moofoo HTTP/1.1.您可以使用string.Contains(other_string)方法,但正则表达式使此过程更加详细,无错误,灵活且方便.

Regexp由块组成,可以在将来用于替换.每个块定义整个字符串在某个位置可以包含的符号.块允许您定义这些符号或使用模式来简化您的工作.

可能是或可能不在当前字符串位置的符号确定如下:

  • 如果你确定这些符号必须在那里,只需"按原样"使用它们.在我们的示例中,这匹配HTTP单词 - 这始终存在于HTTP标头中.
  • 如果您知道所有可能的变化,请使用|(逻辑OR)运算符.注意:所有变体必须用方框符号括起来 - 圆括号.请阅读以下详细信息.在我们的例子中匹配一个GET字-这个头可以使用GET,POST,PUTDELETE词.
  • 如果您知道所有可能的符号范围,请使用范围块:例如,可以将文字确定为[a-z],[\w][[:alpha:]].方括号范围块的标志.它们必须count运算符一起使用.这个用于定义重复.例如,如果您的单词/符号应匹配一次或多次,则应使用以下内容定义:

    • ? (意思是'可能存在而且可能不存在')
    • + (代表'一次或多次')
    • * (代表'零或更多')
    • {A,} (代表'A或更多')
    • {A,B} (表示'不小于A且不大于B倍')
    • {,B} (代表'不超过B')
  • 如果您知道哪些符号范围不能出现,请在范围内使用NOToperator(^),最开始:[^a-z]匹配132==?while [^\d]匹配abc==?(\d定义所有数字并等于[0-9][[:digit:]]).注意: ^如果未在范围块中使用,则还用于确定整个字符串的开头:^moo匹配moofoo与否foomoo.要完成这个想法,$匹配整个字符串的结尾:moo$匹配foomoo与否moofoo.

  • 如果您不关心要匹配的符号,请使用star:.*是最常用的模式,以匹配任意数量的任何符号.

    Note: all blocks should be enclosed by round brackets ((phrase) is a good block example).

    Note: all non-standard and reserved symbols (such as tab symbol \t, round brackets ( and ), etc.) should be escaped (e.g. used with back-slash before symbol representation: \(, \t,, \.) if they do not belong to any block and should be matched as-is. For example, in our case there are two escape-sequences within HTTP/1.1 block: \/ and \.. These two should be matched as-is.

    Using all the text before i've typed for nearly 30 minutes, let's use it and create a regexp to match our example HTTP header:

  • (GET|POST|PUT|DELETE) will match HTTP method

  • \ will match <SP> symbol (space as it defined in HTTP specification)
  • HTTP\/ 会帮助我们只计算HTTP请求
  • (\d+\.\d+)将匹配HTTP版本(这1.1不仅匹配,而且12.34也匹配)
  • ^并且$将是我们的字符串边界限制器

收集所有这些陈述将给我们这个正则表达式:^(GET|POST|PUT|DELETE)\ HTTP\/(\d+\.\d+)$.