‫欢迎回来｡
‫在本视频中, 我们将讨论正则表达式｡
‫它是正则表达式引擎试图在输入文本中匹配的语言或模式｡
‫因此, 我们可以创建输入文本, 然后使用正则表达式来检查特定模式｡
‫这是超级强大的｡
‫它不仅在C语言中使用, 而且几乎在所有编程语言中都使用｡
‫例如, 如果用户输入了正确的电子邮件地址, 或者用户输入了正确的链接或类似的东西,
‫它就很有用｡
‫所以你可以使用正则表达式来计算这些东西, 搜索特定的模式, 然后做一些事情｡
‫如果他们在那里或如果他们不在那里, 那么什么都不要做, 例如｡
‫我在这个网站上,
‫你可以通过一个快速的参考来查看正则表达式语言, 这里有很多不同的转义字符, 以便查找内容或创建模式｡
‫这里有很多, 我将使用其中最重要的一个｡
‫我不打算一一介绍, 但你会看到许多不同的例子,
‫这些例子会确保你理解正则表达式, 然后如果你需要的话, 回到一边使用其他的正则表达式会非常容易｡
‫好吧, 我会的
‫让我们回到Visual Studio, 我已经创建了一个小的示例文本｡
‫因此, 让我们创建一个新的正则表达式项目｡
‫我这里有一个｡
‫我将按照您希望的任何方式调用它, 并在此处创建一个新文件｡
‫新项目｡
‫这一次我们不会创建一个类, 它只是一个非常基本的文本文件｡
‫这里是一个文本文件, 我将它命名为示例文本｡
‫现在, 让我们打开该示例文本文件｡
‫我只是复制并粘贴了一些代码或文本｡
‫如你所见, 数字, 电话号码, 德国电话号码等等, 字母表,
‫一些拉拉拉拉的文字等等｡
‫所以我们将使用正则表达式来标记我们要搜索的特定模式, 一旦我们付诸实践, 这将变得更有意义｡
‫因此, 让我们按下Control F或Command F, 以便在此处找到查找工具｡
‫一旦你在这里, 按这个, 使用正则表达式或alt e, 这样它将使用正则表达式｡
‫现在, 我们的搜索控制台将应用正则表达式｡
‫那么我们的正则表达式将使用什么来表示其中的一些｡
‫让我们从一个非常简单的例子开始｡
‫我将从选项卡开始｡
‫所以我们用反斜杠制表符｡
‫如您所见, 制表符被标记出来
‫所以在我的例子中, 我会把它放大一点, 这样你就能看得更清楚｡
‫这里有一些提示｡
‫让我再创建一些选项卡｡
‫如您所见, 所有选项卡都在此处标记｡
‫它们都被突出显示了｡
‫现在我们用反斜杠n来查找每一个新行, 这样你就可以看到这是新行开始的地方, 这里也是｡
‫这就是我按回车键的地方｡
‫让我再按几下回车键｡
‫你可以看到, 每次我按回车键, 然后换行, 我都会有一个反斜杠,
‫这就是我如何判断是否有新的一行｡
‫那么, 我从哪里得到这些反斜杠, 等等呢？
‫我可以在正则表达式､ 语言､ 快速参考下找到它们, 但我还创建了一个文本文件的小片段｡
‫让我创建一个小文件并将其粘贴到其中｡
‫你可以从这节课的资料中下载它们, 我把它们叫做片段, 点文本｡
‫这里我们有字符转义符, 比如说, 制表符, 我们可以找出字符串中是否有制表符,
‫在我的例子中, 是文本文件, 整个文件｡
‫在这里, 我检查整个文件, 我检查整个文件中的每一个新行或每一个制表符｡
‫差不多吧｡
‫那好吧
‫我们有字符类, 例如, 一个点, 一个简单的点是一个通配符, 匹配任何单个字符,
‫除了反斜杠n, 所以除了换行符｡
‫让我们来看看这是不是真的｡
‫所以我们有了新的台词｡
‫让我们使用N键再次检查一下｡
‫如您所见, 我们得到了所有新行｡
‫现在让我们使用点和点, 如您所见｡
‫匹配任何单个字符｡
‫所以这个点和或点是一个通配符｡
‫所以如果你想把所有东西都标记出来, 好吧, 这就是你要走的路｡
‫所以你可以看到它检查了它说的一切, 除了新的一行｡
‫但看起来, 新的线条也被标记出来了｡
‫所以每次我创建一个新行, 它仍然用这个点标记｡
‫好吧, 我会的
‫让我们看看下一个｡
‫我将介绍其中的一些, 然后我们将把它们结合起来, 使用一些很酷的东西｡
‫好吧, 我会的
‫So匹配任何数字或任何十进制数字｡
‫让我们来看看｡
‫反斜杠D代表数字｡
‫如你所见, 我的数字, 1, 2, 3, 4, 5,
‫67890都被标记了, 这里我所有的数字都被标记了, 中间的值, 例如加号, 散列标记等等,
‫它们都没有被标记｡
‫因此, 任何数字都将被找到, 或者任何数字都将与该正则表达式的模式匹配｡
‫反斜杠d表示十进制｡
‫反斜杠d的作用正好相反, 所以它只取数字, 就像你在这里看到的.
‫如果你想有空白色, 你可以使用反斜杠s｡
‫然后你会得到你文件中的任何白色｡
‫所以如果你, 比如说我想去掉文件中的任何白色, 你可以使用这个模式,
‫去掉所有匹配这个模式的东西｡
‫大写的s在另一边是一切, 不是一个白色｡
‫正如你所看到的, 首都几乎是相反的｡
‫一直都是
‫所以DX都是数字｡
‫大写的D除了数字, 所以除了数字的一切｡
‫好吧, 那我们给予查查有什么消息｡
‫包括字符和数字｡
‫这里它给出了所有的数字和字符, 比如ABCD等等｡
‫所以在这里整个字母表都被标记了, 就像我所有的数字一样｡
‫这里你可以看到点没有被标记, 斜线和那些梅塔, 那些特定的字符, 它们也没有被标记,
‫也没有添加｡
‫好吧, 我会的
‫如果你还想得到其他的, 用大写字母W, 如果你还想得到, 比如, LA, 让我们搜索, la,
‫la｡
‫正如您所看到的, 我可以在两种情况下使用小写或大写进行搜索｡
‫我的啦啦啦啦文本在这里如果你想唱啦啦啦啦啦啦等等, 那么这就是在这里标记的｡
‫但是正如你所看到的, 所有的都符合这个模式, 尽管我没有使用大写字母｡
‫好吧, 我会的
‫如果我想只显示绑定到一个特定边的那些, 我可以继续使用Beck或D
‫l a, 它们是这样的, 现在将只显示边界朝向左侧的那些｡
‫也就是说, LA前面没有任何内容, 或者LA前面有一个白色, 因此只会标记这些内容｡
‫如你所见, 这个洛杉矶也没有标记｡
‫这是因为单词边界不在左手｡
‫让我们快速回顾一下这些片段, 看看这里有什么｡
‫所以我们有需要研究的角色群｡
‫然后我们有了否定符号｡
‫所以锚定, 匹配必须从字符串或行的开头开始｡
‫如果您使用, 则双结雅符号和相符项目必须出现在字串的结尾或之前｡
‫下一行字符串的行尾｡
‫差不多吧｡
‫好吧, 那么｡
‫是啊, 让我们看看那些｡
‫例如, 让我们回到我们的示例文件｡
‫抑扬符号｡
‫如你所见, 这个有标记｡
‫所以它在字符串的开头｡
‫让我们来一个A｡
‫正如你在这里看到的, 在字符串的开头有一个A, 或者如果你想有一个M,
‫也在字符串的开头｡
‫所以你在这里｡
‫如果我想得到字符串末尾的那个呢？
‫好吧, 问题是我们有一整篇课文｡
‫所以整个示例文本文件就是一个字符串｡
‫所以如果我想在最后得到它｡
‫如你所见, 在字符串的末尾有一个字符, 就是这个加号｡
‫所以如果我想有加号, 顺便说一句, 或者DOT或者任何地铁字符, 我需要摆脱这些｡
‫所以如果我去找他们, 我就得逃离他们｡
‫我怎么才能摆脱他们呢？
‫我可以用反斜杠来摆脱它们｡
‫所以反斜杠加这里就是加｡
‫如你所见, 字面上的加号在另一边｡
‫所以如果我输入加号, 正如你所看到的, 这个加号将不会被找到｡
‫这是因为它是一个梅塔, 如果我们使用正则表达式来找到它们, 我们需要转义它们｡
‫所以反斜杠加会给予我加｡
‫如你所见, 这里的加号和那里的加号都有标记｡
‫但是现在如果我只想在字符串的末尾加上一个, 就像我说的,
‫整个文本就是一个字符串, 我只需要使用美元符号, 现在我可以看到这个加号被标记了｡
‫但是, 此处的加号未标记或未突出显示｡
‫现在让我们快速了解一下真实的范围
‫如您所见, 我们将此字符组与字符组中的单个或任意单个字符进行匹配｡ 默认情况下,
‫匹配区分大小写｡
‫所以性格群体｡
‫我们去看看｡
‫让我们来看看我们的示例文本｡
‫在这些方括号中, 我可以继续做A到Z这样的事情｡
‫现在A和Z之间的每一个字符都将被突出显示｡
‫如您所见, 所有字符都被突出显示｡
‫如果我只想有一个到F, 如你所见, 只有一个f被突出显示, 如你所见, 它不在乎｡
‫它既有大写字母, 也有小写字母｡
‫因此, 您可以看到, 我们的Visual Studio在默认情况下似乎并不关心这个问题｡
‫匹配区分大小写｡
‫因此, 在我们的示例中, 字符组不区分大小写, 如您所见｡
‫所以两者都需要｡
‫好吧, 我会的
‫但是如果你想确定, 在其他情况下你需要用A到Z, 比如,
‫像这样和A到Z像这样｡
‫所以他们会有小写和大写字母？
‫差不多吧｡
‫好吧, 我会的
‫这是一个群体, 这是一个群体的例子
‫我们可以用这里的任何字母｡
‫所以你可以看到, 我们放进去的每一个东西或者每一个字母现在都被标记或者高亮显示了｡
‫因此, 在此群组中, 群组中的所有项目都会反白显示｡
‫现在, 我们可以创建其他范围以及数字｡
‫假设我想要所有的数字, 从1到5的数字｡
‫1到5之间的所有数字我都有不包括在内｡
‫一, 二, 三, 四, 五.
‫如果我想要相反的结果呢？
‫好吧, 那我就可以再用抑扬符了｡
‫所以扬抑符1到5会给予我除了1到5之外的所有数字｡
‫所以如果我想得到除7之外的所有数字, 比如说, 我应该输入什么？
‫好吧, 我有｡
‫我希望你能想明白｡
‫只是抑扬符七｡
‫好吧, 那我现在要怎么找出具体的模式？
‫因为到目前为止, 我们使用的是非常通用的正则表达式｡
‫我们只使用了非常简单的字符等等｡
‫那么如果我想有这样一个特定的结构呢, 比如说三位数, 三位数, 四位数,
‫它们之间用破折号隔开｡
‫那我该怎么做呢？
‫我说是一个数字, 然后是另一个数字, 然后是另一个数字｡
‫如你所见, 这符合我们所有的模式, 也符合我们所有的数字｡
‫那是因为它们都至少是三个数字｡
‫所以如果我在这里再加一行, 如你所见, 第一行会被突出显示｡
‫然后在第三行, 只有至少有四个数字相连的数字才会突出显示｡
‫如果我想突出显示第三行和第四行, 因为它们有相同的模式,
‫那么我可以做下面的事情, 比如减去反斜杠d, 反斜杠d, 反斜杠d和反斜杠d,
‫现在我突出显示了这两行或者这两个数字｡
‫这是一种方法, 我可以用这种结构来计算所有的电话号码, 还有更简单的方法来做｡
‫如果我不想的话, 我不需要输入这么多D｡
‫有一种更简单的方法, 我可以使用下面的方法, 我可以说,
‫在花括号内我说home或者我告诉我需要多少个转义字符或模式｡
‫所以在这个例子中, 我说, 好的, 我想要三个D, 也就是三位数｡
‫同样的事情也适用于我们的第二个条目或第二部分信息｡
‫最后一个, 如你所见, 三个是不够的｡
‫我们需要四个｡
‫所以现在它符合这两种模式｡
‫如果我不想只有负号, 还想有点或哈希呢？
‫我可以在两种情况下都使用它, 但如您所见, 所有内容都包括在内｡
‫如你所见, 我们有三个数字, 然后是其他数字, 然后是更多的数字｡
‫所以我们实际上有这一块｡
‫这就是为什么第七行也被标记了｡
‫八个人也一样｡
‫如您所见, 它从49之后开始, 这意味着我们这里也有这种模式｡
‫但我不想有那些模式｡
‫我想说得更精确些｡
‫比如说, 我想把散列标签放在里面.
‫我想有减号和点, 但我只想有这个特定的结构｡
‫那我该怎么做呢？
‫我可以使用横向分组搜索, 也就是说, 我不再使用点, 而是再次使用方括号,
‫它们将是我的小组搜索｡
‫所以在这里我说要么是一个点｡
‫或者是个散列或者是个负号｡
‫所以你现在可以看到, 这三个角色都很好｡
‫但没有别的了｡
‫现在, 如果我也想用它来表示第一个字符｡
‫我在这里画了一个点｡
‫所以它用了负号, 点和哈希｡
‫但我想拥有他们三个, 而不是其他任何东西｡
‫比如说, 如果我在这里输入一个A呢？
‫但现在情况不同了｡
‫但如果它只是一个点, 那么A是好的｡
‫但如果我进入我的小组, 我在那里, 我的具体小组搜索｡
‫这是一个小组搜索｡
‫现在, 它不再包括在内, 所以它必须是这三个字符之一｡
‫好吧, 我会的
‫如果你觉得这是一个挑战, 而且你已经准备好迎接真实的的挑战, 那么就为这三个数字创造一个结构｡
‫所以为这三个不同的号码创建一个模式, 因为这是在德国创建一个移动的号码的三种不同方式｡
‫这就是大致的结构｡
‫如果你从德国打电话, 这是如果你从德国以外打电话, 这也是｡
‫因此, 无论是加号还是双零, 通常情况下, 如果您拨打您所在国家/地区以外的电话,
‫您需要在加号上加上国家/地区代码｡
‫和零零一样, 它代表这个加号｡
‫好吧, 我会的
‫所以如果你愿意的话, 你可以为这个创建结构｡
‫这很难｡
‫我还得给你看一样东西｡
‫也许这不仅仅是一件事｡
‫首先, 我们来看看管道｡
‫比如说我想要+49或者我想要0049.
‫现在, 这本身是行不通的｡
‫为什么会这样呢？
‫如果我们看一下代码段, 我们可以找到限定符, 但我们还没有使用限定符｡
‫这是我们现在需要做的事情｡
‫同样的事情也适用于分组构造和交替构造｡
‫这些就是我们现在要用到的｡
‫我们需要先检查这些数字, 然后才能为这些数字创建完整的结构｡
‫因此, 让我们从使用交替结构和限定符开始｡
‫所以加号表示与前一个元素匹配一次或多次｡
‫我不想那样做｡
‫我只想有一个字面上的加号｡
‫如你所知, 加号是一个梅塔, 它需要被转义｡
‫所以我需要在加号前加一个反斜杠｡
‫现在你可以看到我在用管子｡
‫所以我说要么是+49要么是0049｡
‫如你所见, 这两个结构或这两个模式都在这里标出了, 或者我的两个数字都突出显示了｡
‫这就是这根管子的作用｡
‫不是你就是我｡
‫所以在我们所看到的所有数字中, 其中一个必须是真的｡
‫那就没问题了
‫这不仅是数字, 也是字符｡
‫所以, 打个比方, 如果我想让先生｡ 和夫人｡ 所以如果我想标记这些, 我会使用M R管道M,
‫这意味着Mr. 或 必须是真的｡
‫这就是我们的例子｡
‫这就是“非此即彼”, 正如你在这里看到的, 我们的交替结构｡
‫那么分组结构是我们需要研究的东西｡
‫为了看这些, 我认为最好我们看看这里的链接｡
‫我们这里有一些链接, HTTPS和HTTP链接, 有W, W, W或没有｡
‫我们有四个不同的链接｡
‫如果我想使用一个组, 比如说我想使用这个组, 但是正如你所看到的, 并不是所有的链接都是这样的｡
‫所以为了找到链接, 我们需要首先进入HTTP, 然后我们有这个结构｡
‫到目前为止一切都很好｡
‫现在如果我想让这两个仍然有效, 我需要检查这个组, 因为这里是这样的, 这里不是｡
‫那我该怎么做呢？
‫我需要使用一个组, 所以我将对w w w进行分组, 如您所见, 目前只有这个链接｡
‫第一个会反白显示｡
‫但如果我输入这个问号, 就没问题了｡
‫所以我用了ww这个群, 但是我把它和结合起来了｡
‫这个问号和这个问号有什么关系？
‫这是一个量词, 它和前一个元素匹配, 零次或一次.
‫因此, 限定符是星星, 它与前一个元素匹配零次或多次, 然后是加号,
‫它与前一个元素匹配一次或多次｡
‫然后是问号, 它与前面的元素匹配零次或一次｡
‫你也可以说你想让我们做多少次｡
‫-没错—没错
‫因此它与前一个元素匹配｡
‫-没错—没错
‫结束时间和范围也一样｡
‫所以至少结束时间｡
‫但超过或但不超过MX倍｡
‫这就是你可以使用的另一个量词｡
‫现在你们已经看到了一个分组的例子, 将W分组, 然后是一个使用问号的限定词的例子.
‫如你所见, 这两件事仍然是活跃的｡
‫所以这个w w w和没有的那个仍然是活动的, 这里它实际上是w w w点｡
‫所以这个点也包括在内｡
‫然后在问号之后, 我可以继续说教程｡
‫所以这两个东西都是活动的｡
‫好吧, 我会的
‫我们还是回到过去吧｡
‫我们仍然有这个小挑战, 让所有这些数字都是活跃的｡
‫现在你应该能够通过你所看到的来做到这一点｡
‫这是相当坚韧的｡
‫我告诉你, 这可能要花很长时间, 甚至半个小时左右｡
‫尽管这是一个非常基本的示例, 但根据您所学到的知识或您在此处看到的片段, 可能需要一段时间才能弄清楚｡
‫因此, 最好下载代码片段文件, 看看不同的字符类､ 字符转义､
‫锚点等来尝试一下｡
‫正如我所说, 这是一个困难的问题｡
‫如果你不觉得像一个困难的挑战,
‫然后等待更容易的挑战, 这将是找到所有的网站链接或好, 标记所有的网站链接或突出显示他们｡
‫好了, 现在你应该知道了所有你需要的东西, 以便创建模式来找到德国移动的号码｡
‫而且有一件事需要考虑｡
‫所以它们总是以0或+49或a0049开始, 然后跟在1后面｡
‫所以总是这样｡
‫如你所见, 这里一个, 那里一个, 这里一个｡
‫下面的数字要么是6要么是7, 所以这里不允许有其他数字｡
‫然后是下一个数字, 在本例中是第四个数字, 它可以是任何数字｡
‫然后你有一个斜杠, 后面是八个数字｡
‫这八个数字可以是任何数字, 所以它可以是这十个不同数字中的任何一个｡
‫这就是大致的结构｡
‫请试着建立它｡
‫如果你觉得这是一个真实的挑战, 这并不容易｡
‫可能需要相当长的时间来设置它｡
‫但是你已经看到了你需要做的事情, 好吧, 请给予, 然后继续, 看看这样做的片段｡
‫所以总是回到片段, 以便弄清楚它, 这可能是困难的｡
‫如果你觉得你没有取得任何进展, 你不能让它工作, 所以不能得到所有这三个数字被突出显示,
‫那么这是好的, 因为我会解释后｡
‫好吧, 我会的
‫所以我现在要解释的是, 如果你想自己试试, 只要暂停视频｡
‫好吧, 我会的
‫首先, 我们有一个0, 一个+49或者a0049｡
‫我们从+49开始, 我会用一个群来表示｡
‫我需要反斜杠加49, 以便使用文字加号, 正如你在这里看到的｡
‫那么另一个选择是a0049｡
‫所以不是+49就是0049｡
‫另一个选择就是它只是一个零｡
‫如你所见, 这里只有这个零｡
‫但正如你所看到的, 所有其他的现在都是活跃的｡
‫所有其他零也处于活动状态｡
‫我在这里加一个问号, 因为我说的是可以是零, 也可以是零｡
‫所以在这些情况下, 这两个情况下没有｡
‫只有在这种情况下, 我们才有一个零｡
‫现在让我们来看看这个问号是什么意思｡
‫它表示与前一个元素匹配零次或一次｡
‫所以这两种情况下都是零, 第八行有一个｡
‫好吧, 我会的
‫不是这样的
‫这只是数字的开始｡
‫好吧, 我知道了
‫跟着一个一｡
‫所以现在我们有01, 然后是6或7｡
‫所以我又创建了一个组, 在括号里写上六, 五, 七｡
‫所以到目前为止一切都很好, 那么它可以是任何数字｡
‫现在我可以使用反斜杠D, 然后我们有一个斜杠, 然后我们有另一个数字｡
‫而且不是一个数字, 而是八位数｡
‫所以我们可以说, 好吧, 它将是八位数, 我们是｡
‫这就是结构｡
‫我将在下面添加它｡
‫这就是我们的模式｡
‫为了得到德国的电话号码, 至少是我们在这里看到的, 一般来说, 你应该找到所有的德国电话号码｡
‫当然, 您也可以对您的国家/地区号码进行同样的操作｡
‫所以不管你来自哪里, 不管你住在哪里, 检查一下电话号码或手机号码,
‫看看这些手机号码的结构是如何的, 并试图建立一个模式｡
‫如果你愿意的话, 你甚至可以分享｡
‫这将是有趣的看到一切｡
‫课程中的其他人和我自己｡
‫这将是非常有趣的, 看看你从哪里来, 以及如何结构的国家的电话号码或移动的号码是｡
‫好吧, 太好了｡
‫所以我希望你能做到｡
‫如果你没有, 我希望你能遵循我刚才解释沿着结构｡
‫现在, 让我们继续, 实际上, 让我们检查一下｡
‫那位先生｡ 和例子小姐, 因为这里我们有先生｡ 帕内塔或者我们的先生｡ 穆勒, 毫无疑问｡
‫那么, 我如何才能检查出交通部是否在那里？
‫现在你应该知道了｡
‫你可以用问号来表示｡
‫所以我们就从...
‫如您所见, 所有三行或所有四行都至少标记了｡
‫先生..
‫如果我用一个点, 你可以看到它们都是活动的｡
‫但那是因为这意味着百搭牌或任何东西｡
‫所以这里也可能是空的｡
‫所以如果你想确定它是一个点, 你需要使用反斜杠｡
‫现在, 下一个是空的, 然后我们就有了名字｡
‫所以可能是A到Z｡
‫所以从A到Z都是这样｡
‫那么现在我怎么才能让先生｡ 缪勒先生和 罗伯森也在里面吗？
‫我需要再用一次点, 但这次要用问号, 因为我现在要说的是,
‫可以有一个点的顺序, 然后我们有一个空的空间｡
‫所以这里我用了字面意义上的空格, 但是你也可以用反斜杠, 因为反斜杠s, 如果你再签出它的话,
‫表示匹配任何空格字符, 这就是我们想要的｡
‫所以现在所有的名字都是正确的｡
‫如果你想有一个特定数量的字符跟在后面, 那么这个名字应该至少有四个字符, 然后你可以在这里使用这个量词｡
‫所以我们用的量词N是4｡
‫所以我们说它至少是四个字符或四个字母｡
‫如果你不仅想用A到Z这样的字符, 还想用数字, 比如说,
‫你可以用反斜杠W, 反斜杠W的意思是, 你可以看到, 它是一个单词字符｡
‫A到Z, A到Z, 0到9和下划线｡
‫比如说, 它对玩家名或用户名之类的东西很有用｡
‫如果我想有多个字符, 我可以使用加号｡
‫因此量词plus与前一个元素匹配一次或多次｡
‫让我们来看看｡
‫让我们加上加号｡
‫正如你现在所看到的, 杜达先生 穆勒先生 罗伯森先生和 G､
‫所有字符都被完全突出显示, 因为我们已经说过, 我们希望有一个或多个字符, 如果你想有零个或更多的时间,
‫那么我们可以使用一个星星｡
‫正如你所看到的, 星星在这里工作, 以及因为我们有更多的时间或更多的字符｡
‫好了, 现在是时候来点小挑战了｡
‫查找网站链接｡
‫我们已经开始了, 但现在请继续, 并找到每个网站链接, 这是与此结构｡
‫它不一定是教程｡
‫EU它不应该是一个字面上的名称, 但它应该是一般的结构, 结构是,
‫正如你所看到的, https或HTTP冒号, 斜杠, 斜杠｡
‫然后w w w点或不点｡
‫然后是域名､ 域和顶级域（本例中为EU）｡
‫所以当然也是用一个点隔开的｡
‫好吧, 我会的
‫所以请继续尝试｡
‫好吧, 我会的
‫我希望你试过了｡
‫我们从http sx开始, SX是可选的｡
‫所以我们只要输入问号｡
‫所以它必须是一个是或否, 因为这就是这个问号的作用｡
‫然后我们有冒号正斜杠, 正斜杠, 然后我们有一个组｡
‫因此, 我们有一个W WW DOT组, 它是可选的｡
‫所以我们再用一次问号, 然后我们就有了名字｡
‫在这个例子中我会用一个W+的词组, 当然这里必须是反斜杠W｡
‫现在它也使用了域名, 后面跟着一个点,
‫这可能是一个字面点, 我们在下一组中使用一个字面点, 在该组中我们还有另一个单词字符｡
‫所以它可以是一个或多个单词字符, 就这样｡
‫这就是我们的结构｡
‫所以这里这个, 加上一个或多个时间, 我们有两个时间｡
‫所以高层次的领域是这一片, 前面有一个点｡
‫反斜杠点, 这意味着它是一个字面上的点｡
‫然后我们就有了这个词本身, 在这个例子中, 它是EU, 或者它可以是. com, 或者它可以是.
‫academy等等｡
‫然后我们就有了名字本身, 就是这里的这一部分｡
‫所以, 域名是w还是w, 是http还是https｡
‫好吧, 我会的
‫当然, 你可以创建自己的正则表达式, 但有时候谷歌一下也是有意义的｡
‫假设您想要一个表示电子邮件地址的表达式｡
‫所以你当然可以继续说, 好吧, 我想在那之前有角色｡
‫所以你说W+, 然后再跟一个广告符号, W+, 再跟一个像这样的点, 你又得到了像com这样的东西｡
‫所以再加一个反斜杠w｡
‫所以这将是一个非常, 非常通用的东西, 但它也可能是相当假的｡
‫所以, 人们已经考虑过非常复杂的正则表达式, 它们确实非常安全｡
‫我们上网查查吧｡
‫让我们回到互联网上, 现在我们在谷歌上搜索电子邮件地址reg X或reg X正则表达式, 然后你会找到这个网站｡
‫它叫做email regexp, 它写的是email address, 正则表达式99. 99%的作品｡
‫在这里你可以找到正则表达式, 官方标准, 然后是Python版本, JavaScript版本,
‫HTML等等｡
‫正如你所看到的, 这里有不同的编程语言｡
‫这就是升C调的那个｡
‫但正如你在这里看到的, 另一种使用系统的方式, 遇到了点邮, 点邮地址类｡
‫因此, 您可以使用这个运算式, 也可以只使用类别｡
‫我想, 我通常会使用该类来确定电子邮件地址是否有效｡
‫将电子邮件地址传递给邮件地址, 点邮件地址, 字符串类构造函数｡
‫所以这听起来也是一个有效的方法｡
‫但一般来说, 你可以这样做｡
‫所以如果你想有一个正则表达式, 你可以经常搜索它｡
‫然而, 使用该文件并将其复制到我的Visual Studio文件查找器中实际上并不起作用｡
‫所以让我们使用标准的｡
‫所以一般的电子邮件正则表达式｡
‫所以我将把代码复制到这里, 然后返回Visual Studio, 搜索特定的正则表达式｡
‫正如你所看到的, 如果我在谷歌网站上使用信息, 测试测试网站确实有效｡
‫如您所见, 它也能正常工作｡
‫这段代码似乎也能正常工作｡
‫所以你在这里｡
‫这是一个正则表达式｡
‫如果你必须自己解决这个问题, 我想你会的｡
‫你需要一段时间, 但这就是重点, 对吗？
‫你不需要自己开发每件事, 也不需要自己思考每件事｡
‫你可以保存你生命中的时间, 仅仅使用互联网来解决问题, 仅仅使用谷歌来找到你正在搜索的东西｡
‫通常你会找到一个很好的解决方案, 你不需要自己创建所有的解决方案｡
‫好吧, 我会的
‫我希望你喜欢这个正则表达式的简短课程｡
‫还有最后一件事要做, 那就是在升C中使用正则表达式｡
‫我知道这段视频很长, 但请稍等, 因为现在我们要用C++来使用正则表达式｡
‫为了使用正则表达式, 你可以创建一个正则表达式｡
‫在这个例子中, 正如你所看到的, 它不知道正则表达式｡
‫因此, 我们需要添加命名空间, 即系统点､ 文本点和正则表达式｡
‫这就是我们想要的｡
‫现在我们可以使用regex, 我将它命名为regex, 这将是一个新的regex｡
‫在这里我可以输入模式｡
‫你可以看到, 这是一个字符串模式, 你可以把它放在这里,
‫或者你可以创建一个字符串模式, 这就是你的模式.
‫假设在这个例子中, 我们需要在开头使用ADD, 我使用反斜杠D来找到模式中的所有数字｡
‫所以我要给予它给regex类的构造函数.
‫正如你现在所看到的, 它将使用这个正则表达式模式, 在我的例子中, 只是数字｡
‫所以它只会说, 好的, 给予我所有的数字｡
‫现在, 我们来创建一个测试字符串, 我将把它命名为text, 在这里就是hi｡
‫我的号码是一, 二, 三, 一, 四
‫所以这就是我的考验｡
‫现在为了找到符合这个模式的每一个字符或者每一个时间, 我将使用for each循环,
‫因为我想显示所有不同的匹配｡
‫因此, 让我们使用match集合来实现这一点｡
‫如果签出Match集合, 则该集合是在给定上下文中无效的类型｡
‫好吧, 没关系｡
‫让我们创建一个匹配集合｡
‫我只想说match集合等于reg x点匹配和matches方法｡
‫它会做什么？
‫它会输入一个文本, 然后尝试将其与我的模式相匹配.
‫所以我们在这里使用这个正则表达式｡
‫这就是模式｡
‫我们把它给了正则表达式｡
‫所以现在它试图将模式与我们所拥有的文本进行匹配｡
‫文本就是这行代码｡
‫所以我们现在能做的是显示所有不同的点击｡
‫所以我会说, 找到了这么多的匹配项, 我会用一个新的行来表示｡
‫我就这么说吧｡
‫这是我的点击数, 这是我的匹配点计数｡
‫如你所见,
‫这个匹配集合对象有一个属性叫做count, 它只会说, 它找到了多少次它试图找到的东西？
‫所以不管图案是什么, 不管文字是什么, 我这里也要说文字｡
‫所以我说在文本中, 我有这么多的点击, 现在让我们展示实际的点击｡
‫所以我将对每个都使用, 这将是一个匹配, 称为匹配集合中的命中｡
‫所以每次循环都是这样, 我只需要循环一次｡
‫整个匹配集合或头部匹配集合, 其中包含所有不同的命中｡
‫我会打印屏幕上的每一个点击, 以便查看它在字符串中的位置｡
‫它在这个字符串中的位置｡
‫假设它有我不知道, 这里大概有八到七个字符.
‫八九十｡
‫所以大概是2020年左右｡
‫这是121号这是122号, 是那一个吗？
‫等等｡
‫所以如果你也想拥有这些, 我们可以用一个group集合, 它是我的group, 它是hit.
‫group｡
‫接下来我想展示一下｡
‫所以见渥特｡
‫双击时间｡
‫然后我说, 好吧, 我想有击中本身｡
‫所以我打算用花括号找到ET和位置｡
‫那我怎么才能拿到呢？
‫我使用我在这里创建的组｡
‫所以这个群集合, 我会用点来表示, 或者用方括号括起来, 在位置0｡
‫给予它给我, 告诉我它的价值｡
‫然后我还想有索引｡
‫所以零组和索引｡
‫好了, 现在开始吧｡
‫它会给予我值和找到它的索引｡
‫我将从控制f5开始, 这样它就保持打开状态, 它说在23找到一个, 在24找到一个,
‫在25找到三个, 在26找到一个, 在27找到四个｡
‫如你所见, 它找到了数字, 并给出了这些数字的位置｡
‫这个位置是在这个字符串中的位置｡
‫好吧, 我会的
‫如果我有一个不同的模式, 假设我有多个DS的模式, 所以我想有五个数字｡
‫让我们再检查一遍｡
‫现在它应该只找到一个数字或一个条目, 它在那里说嗨｡
‫数字是一, 二, 三, 四, 三, 一, 五, 四｡
‫这里, 一, 二, 三, 一, 四, 在23号发现的｡
‫所以不管你在这里设置了什么, 都会被找到, 如果我在那里搜索, 它会给予我这个,
‫从索引3开始.
‫所以我要开始了｡
‫你好啊｡
‫我的号码是一, 二, 三, 四, 你好｡
‫在3找到因为这是3位置的第三个位置这里是我们字符串的索引3｡
‫好吧, 我会的
‫这是一个如何使用RegEx和升C的示例｡
‫还有更多｡
‫你可以去看看｡
‫您可以查看相关文档｡
‫但是这个视频更多的是关于正则表达式的一般概念以及如何使用它们｡