返回主页

# 常用表达

本页面是对正则表达式的简要介绍。它并非详尽无遗，因为正则表达式基本上代表整个模式匹配语言。如果你想深入挖掘，你可以在互联网上找到关于它的大量信息; 只搜索“正则表达式教程”或“正则表达式介绍”或类似的东西。

## 匹配所有Microsoft Excel文件：`.*\.xlsx?`

在正则表达式（通常缩写为“正则表达式”）中，某些字符具有特殊含义。例如，dot（`'.'`）代表一个未知字符。例如，你可以使用正则表达式`h.llo`来匹配像`hallo`或`hello`这样的字符串，还可以使用`hzllo`或`h8llo`。

另一个特殊字符是星号（`'*'`），代表“前面的字符，重复零次或多次”。因此，如果输入正则表达式`hello*`，则以下字符串将匹配：`hell`，`hello`，`helloo`，`hellooo`等等。

作为这些规则的结果，如果将点和星号放在一起，它们将匹配任意字符序列。例如，正则表达式`gen.*ion`将匹配：`genion`，`generalization`，`generation`，`gentrification`等等。

类似于星号的特殊字符是问号（`'?'`），它代表“前一个字符，零次或一次”。您也可以将其改写为“前面的角色可能存在也可能不存在”。与星号一样，它可以与点组合。因此，正则表达式`hell.?`将匹配：`hell`，`hello`，`hells`，`hell4`等。

由于点和星号等字符具有特殊含义，如果你想要字面匹配它们，你必须逃避它们。这是通过在它们之前加上另一个特殊字符反斜杠（`'\'`）来完成的。需要反斜杠的典型情况是匹配文件名中的点。例如，要匹配文件名为`license.txt`的所有文件，您必须使用正则表达式`license\.txt`而不仅仅是`license.txt`— 后者也会匹配，例如`license-txt`。

因此，如果我们把所有这些放在一起，我们可以写下一个匹配所有Microsoft Excel文件的正则表达式，如：`.*\.xlsx?`。这个正则表达式基本上是说：一个任意的字符序列，后跟一个文字点，后跟“xls”，末尾有一个可选的“x”。

## 匹配一系列数字：`journal\d+\.doc`

假设您要匹配所有以“journal”开头并以时间戳结尾的Microsoft Word文件，如下所示：“journal2007.doc”。而且，你*不想要的是匹配像“journalism.doc”这样的文件。

像`journal.*\.doc`这样的正则表达式在这里不起作用，因为它也匹配“journalism.doc”。解决方案的第一步是用`[0-9]`或`\d`替换点，两者都完全匹配一位。表达式`[0-9]`实际上是一个比`\d`更通用的表示法，因为你可以编写`[4-6]`来匹配数字`4`，`5`和`6`。它甚至适用于字母：`[m-p]`匹配从m到p的所有小写字母。

因此，如果我们将`\d`与星号结合起来，我们可以写下正则表达式`journal\d*\.doc`，它将与“journal2007.doc”匹配，但不能与“journalism.doc”匹配。但等等，这不太正确：回想一下，星号表示“前面的字符，重复零或更多次”。在这种情况下，我们不希望“日记”之后的零数字，我们想要至少一个— 否则正则表达式也会匹配文件“journal.doc”。

所以这是你的另一个特殊角色：加符号(`'+'`)代表“前面的角色，重复一次或多次”。因此，我们的正则表达式的最终版本是：`journal\d+\.doc`