C# 如何确保字符串与特定格式匹配?

C# 如何确保字符串与特定格式匹配?,c#,regex,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 o

如何检查字符串是否与特定格式匹配?例如,如何检查字符串是否与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

我可以建议您阅读wiki页面。

我可以建议您阅读wiki页面。

正则表达式匹配非常简单:

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

if (r.Match(whatever).Success)
{
  // Do_something
}
如果
字符串与
正则表达式匹配,则此代码将调用一些操作

那么它们是什么,这些正则表达式(与regex或regexp abbrevation相同)?它们只不过是字符串模式,设计用来作为其他字符串的过滤器

假设您有很多HTTP头,并且只想获取
get moofoo HTTP/1.1
。您可以使用
string.Contains(other_string)
方法,但是regexp使这个过程更加详细、无错误、灵活和方便

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

符号可能在当前字符串位置,也可能不在当前字符串位置,确定如下:

  • 如果你确信这些符号一定存在,就用“原样”吧。在我们的示例中,这与
    HTTP
    word匹配-这总是出现在HTTP头中
  • 如果您知道所有可能的变化,请使用
    |
    (逻辑
    )运算符注意:所有变体必须用方框符号-圆括号括起来。请阅读下面的详细信息。在我们的例子中,这一个匹配
    GET
    word-此标题可以使用
    GET
    POST
    PUT
    DELETE
    单词
  • 如果您知道所有可能的符号范围,请使用范围块:例如,可以将文字确定为
    [a-z]
    [\w]
    [:alpha:]
    方括号是范围块的符号。它们必须与计数运算符一起使用。此选项用于定义重复次数。例如,如果您的单词/符号应匹配一次或多次,则应使用以下方法定义:

    • (表示“可能存在,也可能不存在”)
    • +
      (表示“一次或多次”)
    • *
      (表示“零或更多”)
    • {A,}
      (代表“A或更多”)
    • {A,B}
      (表示“不小于A且不大于B倍”)
    • {,B}
      (表示“不超过B”)
  • 如果您知道哪些符号范围不能存在,请在范围内使用
    not
    运算符(
    ^
    ),从一开始:
    [^a-z]
    132=?
    匹配,
    [^\d]
    abc=?
    \d
    定义所有数字,并等于
    [0-9]
    [:digital:]
    注意:
    ^
    还用于确定整个字符串的最开头,如果它未在范围块内使用:
    ^moo
    匹配
    mooo
    而不是
    foooo
    。为了完成这个想法,
    $
    匹配整个字符串的结尾:
    moo$
    将与
    foomoo
    匹配,而不是
    moofoo

  • 如果您不在乎要匹配哪个符号,请使用星号:
    *
    是最常用的模式来匹配任意数量的符号

    注意:所有块都应该用圆括号括起来(
    (短语)
    是一个很好的块示例)

    注意:所有非标准和保留符号(如制表符
    \t
    、圆括号
    )等)都应转义(例如,在符号表示前使用反斜杠:
    \(
    \t,
    \。
    )例如,在我们的例子中,
    HTTP/1.1
    block中有两个转义序列:
    \/
    \.
    。这两个序列应该按原样匹配

    在我键入将近30分钟之前,使用所有文本,让我们使用它并创建一个regexp来匹配我们的示例HTTP头:

  • (GET | POST | PUT | DELETE)
    将匹配HTTP方法

  • \
    将匹配
    符号(在HTTP规范中定义的空格)
  • HTTP\/
    将帮助我们仅计算HTTP请求
  • (\d+\.\d+
    将匹配HTTP版本(这将不仅匹配
    1.1
    ,还匹配
    12.34
  • ^
    $
    将是我们的字符串边界限制器

将所有这些语句集合在一起将得到以下正则表达式:
^(GET | POST | PUT | DELETE)\HTTP\/(\d+\.\d+$
正则表达式匹配变得简单:

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

if (r.Match(whatever).Success)
{
  // Do_something
}
如果
字符串与
正则表达式匹配,则此代码将调用一些操作

那么它们是什么呢,这些正则表达式(与regex或regexp abbrevation相同)?它们只是字符串模式,被设计为用作其他字符串的过滤器

假设您有很多HTTP头,并且只想获取
get moofoo HTTP/1.1
。您可以使用
string.Contains(other_string)
方法,但regexp使此过程更加详细、无错误、灵活和方便

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

符号,可能在当前字符串位置,也可能不在当前字符串位置