正则表达式只是我们用于在文本中检索字母和数字的模式。例如正则表达式 `cat`,表示: 字母 `c` 后面跟着一个字母 `a`,再后面跟着一个字母 `t`。<pre>"cat" => The <ahref="#learn-regex"><strong>cat</strong></a> sat on the mat</pre>
<pre>
"cat" => The <ahref="#learn-regex"><strong>cat</strong></a> sat on the mat
再后面跟着一个字母 `r`。<pre>".ar" => The <ahref="#learn-regex"><strong>car</strong></a><ahref="#learn-regex"><strong>par</strong></a>ked in the <ahref="#learn-regex"><strong>gar</strong></a>age.</pre>
<pre>
".ar" => The <ahref="#learn-regex"><strong>car</strong></a><ahref="#learn-regex"><strong>par</strong></a>ked in the <ahref="#learn-regex"><strong>gar</strong></a>age.
然而,字符集中的英文句号表示它字面的含义。正则表达式 `ar[.]`,表示小写字母 `a`,后面跟着一个字母 `r`,再后面跟着一个英文句号 `.` 字符。<pre>"ar[.]" => A garage is a good place to park a c<ahref="#learn-regex"><strong>ar.</strong></a></pre>
<pre>
"ar[.]" => A garage is a good place to park a c<ahref="#learn-regex"><strong>ar.</strong></a>
再后面跟着一个字母 `r`。<pre>"[^c]ar" => The car <ahref="#learn-regex"><strong>par</strong></a>ked in the <ahref="#learn-regex"><strong>gar</strong></a>age.</pre>
<pre>
"[^c]ar" => The car <ahref="#learn-regex"><strong>par</strong></a>ked in the <ahref="#learn-regex"><strong>gar</strong></a>age.
例如正则表达式 `\s*cat\s*`,表示: 零个或多个空格,后面跟小写字母 `c`,再后面跟小写字母 `a`,再再后面跟小写字母 `t`,后面再跟零个或多个空格。<pre>"\s*cat\s*" => The fat<ahref="#learn-regex"><strong> cat </strong></a>sat on the <ahref="#learn-regex"><strong>cat</strong></a>.</pre>
<pre>
"\s*cat\s*" => The fat<ahref="#learn-regex"><strong> cat </strong></a>sat on the <ahref="#learn-regex"><strong>cat</strong></a>.
该符号 `+` 匹配上一个字符的一次或多次。例如正则表达式 `c.+t`,表示: 一个小写字母 `c`,后跟任意数量的字符,后跟小写字母 `t`。<pre>"c.+t" => The fat <ahref="#learn-regex"><strong>cat sat on the mat</strong></a>.</pre>
<pre>
"c.+t" => The fat <ahref="#learn-regex"><strong>cat sat on the mat</strong></a>.
例如正则表达式 `[T]?he`,表示: 可选的大写字母 `T`,后面跟小写字母 `h`,后跟小写字母 `e`。<pre>"[T]he" => <ahref="#learn-regex"><strong>The</strong></a> car is parked in the garage.</pre><pre>"[T]?he" => <ahref="#learn-regex"><strong>The</strong></a> car is parked in t<ahref="#learn-regex"><strong>he</strong></a> garage.</pre>
<pre>
"[T]he" => <ahref="#learn-regex"><strong>The</strong></a> car is parked in the garage.
</pre>
<pre>
"[T]?he" => <ahref="#learn-regex"><strong>The</strong></a> car is parked in t<ahref="#learn-regex"><strong>he</strong></a> garage.
在正则表达式中花括号(也被称为量词 ?)用于指定字符或一组字符可以重复的次数。例如正则表达式 `[0-9]{2,3}`,表示: 匹配至少2位数字但不超过3位(0到9范围内的字符)。<pre>"[0-9]{2,3}" => The number was 9.<ahref="#learn-regex"><strong>999</strong></a>7 but we rounded it off to <ahref="#learn-regex"><strong>10</strong></a>.0.</pre>
<pre>
"[0-9]{2,3}" => The number was 9.<ahref="#learn-regex"><strong>999</strong></a>7 but we rounded it off to <ahref="#learn-regex"><strong>10</strong></a>.0.
我们可以省略第二个数字。例如正则表达式 `[0-9]{2,}`,表示: 匹配2个或更多个数字。如果我们也删除逗号,则正则表达式 `[0-9]{2}`,表示: 匹配正好为2位数的数字。<pre>"[0-9]{2,}" => The number was 9.<ahref="#learn-regex"><strong>9997</strong></a> but we rounded it off to <ahref="#learn-regex"><strong>10</strong></a>.0.</pre><pre>"[0-9]{2}" => The number was 9.<ahref="#learn-regex"><strong>99</strong></a><ahref="#learn-regex"><strong>97</strong></a> but we rounded it off to <ahref="#learn-regex"><strong>10</strong></a>.0.</pre>
"[0-9]{2,}" => The number was 9.<ahref="#learn-regex"><strong>9997</strong></a> but we rounded it off to <ahref="#learn-regex"><strong>10</strong></a>.0.
</pre>
<pre>
"[0-9]{2}" => The number was 9.<ahref="#learn-regex"><strong>99</strong></a><ahref="#learn-regex"><strong>97</strong></a> but we rounded it off to <ahref="#learn-regex"><strong>10</strong></a>.0.
例如正则表达式 `(ab)*` 表示匹配零个或多个的字符串 "ab"。我们还可以在字符组中使用元字符 `|`。例如正则表达式 `(c|g|p)ar`,表示: 小写字母 `c`、`g` 或 `p` 后面跟字母 `a`,后跟字母 `r`。<pre>"(c|g|p)ar" => The <ahref="#learn-regex"><strong>car</strong></a> is <ahref="#learn-regex"><strong>par</strong></a>ked in the <ahref="#learn-regex"><strong>gar</strong></a>age.</pre>
<pre>
"(c|g|p)ar" => The <ahref="#learn-regex"><strong>car</strong></a> is <ahref="#learn-regex"><strong>par</strong></a>ked in the <ahref="#learn-regex"><strong>gar</strong></a>age.
例如正则表达式 `(T|t)he|car`,表示: 大写字母 `T` 或小写字母 `t`,后面跟小写字母 `h`,后跟小写字母 `e` 或小写字母 `c`,后跟小写字母 `a`,后跟小写字母 `r`。<pre>"(T|t)he|car" => <ahref="#learn-regex"><strong>The</strong></a><ahref="#learn-regex"><strong>car</strong></a> is parked in <ahref="#learn-regex"><strong>the</strong></a> garage.</pre>
<pre>
"(T|t)he|car" => <ahref="#learn-regex"><strong>The</strong></a><ahref="#learn-regex"><strong>car</strong></a> is parked in <ahref="#learn-regex"><strong>the</strong></a> garage.
例如正则表达式 `.` 是用来匹配除了换行符以外的任意字符。现在要在输入字符串中匹配 `.` 字符,正则表达式 `(f|c|m)at\.?`,表示: 小写字母 `f`、`c` 或者 `m` 后跟小写字母 `a`,后跟小写字母 `t`,后跟可选的 `.` 字符。<pre>"(f|c|m)at\.?" => The <ahref="#learn-regex"><strong>fat</strong></a><ahref="#learn-regex"><strong>cat</strong></a> sat on the <ahref="#learn-regex"><strong>mat.</strong></a></pre>
<pre>
"(f|c|m)at\.?" => The <ahref="#learn-regex"><strong>fat</strong></a><ahref="#learn-regex"><strong>cat</strong></a> sat on the <ahref="#learn-regex"><strong>mat.</strong></a>
让我们来看看另一个正则表达式 `^(T|t)he`,这表示: 大写字母 `T` 或小写字母 `t` 是输入字符串的起始符号,后面跟着小写字母 `h`,后跟小写字母 `e`。<pre>"(T|t)he" => <ahref="#learn-regex"><strong>The</strong></a> car is parked in <ahref="#learn-regex"><strong>the</strong></a> garage.</pre><pre>"^(T|t)he" => <ahref="#learn-regex"><strong>The</strong></a> car is parked in the garage.</pre>
<pre>
"(T|t)he" => <ahref="#learn-regex"><strong>The</strong></a> car is parked in <ahref="#learn-regex"><strong>the</strong></a> garage.
</pre>
<pre>
"^(T|t)he" => <ahref="#learn-regex"><strong>The</strong></a> car is parked in the garage.
美元 `$` 符号用于检查匹配字符是否是输入字符串的最后一个字符。例如正则表达式 `(at\.)$`,表示: 小写字母 `a`,后跟小写字母 `t`,后跟一个 `.` 字符,且这个匹配器必须是字符串的结尾。<pre>"(at\.)" => The fat c<ahref="#learn-regex"><strong>at.</strong></a> s<ahref="#learn-regex"><strong>at.</strong></a> on the m<ahref="#learn-regex"><strong>at.</strong></a></pre><pre>"(at\.)$" => The fat cat sat on the m<ahref="#learn-regex"><strong>at.</strong></a></pre>
<pre>
"(at\.)" => The fat c<ahref="#learn-regex"><strong>at.</strong></a> s<ahref="#learn-regex"><strong>at.</strong></a> on the m<ahref="#learn-regex"><strong>at.</strong></a>
</pre>
<pre>
"(at\.)$" => The fat cat sat on the m<ahref="#learn-regex"><strong>at.</strong></a>
在括号中,我们定义了正向先行断言,它会引导正则表达式引擎匹配 `The` 或 `the` 后面跟着 `fat`。<pre>"(T|t)he(?=\sfat)" => <ahref="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.</pre>
<pre>
"(T|t)he(?=\sfat)" => <ahref="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
正向后行断言是用于获取在特定模式之前的所有匹配内容。正向后行断言表示为 `(?<=...)`。例如正则表达式 `(?<=(T|t)he\s)(fat|mat)`,表示: 从输入字符串中获取在单词 `The` 或 `the` 之后的所有 `fat` 和 `mat` 单词。<pre>"(?<=(T|t)he\s)(fat|mat)" => The <ahref="#learn-regex"><strong>fat</strong></a> cat sat on the <ahref="#learn-regex"><strong>mat</strong></a>.</pre>
<pre>
"(?<=(T|t)he\s)(fat|mat)" => The <ahref="#learn-regex"><strong>fat</strong></a> cat sat on the <ahref="#learn-regex"><strong>mat</strong></a>.
负向后行断言是用于获取不在特定模式之前的所有匹配的内容。负向后行断言表示为 `(?<!...)`。例如正则表达式 `(?<!(T|t)he\s)(cat)`,表示: 在输入字符中获取所有不在 `The` 或 `the` 之后的所有单词 `cat`。<pre>"(?<!(T|t)he\s)(cat)" => The cat sat on <ahref="#learn-regex"><strong>cat</strong></a>.</pre>
<pre>
"(?<!(T|t)he\s)(cat)" => The cat sat on <ahref="#learn-regex"><strong>cat</strong></a>.
但是在正则匹配结束时 `i` 标记会告诉正则表达式引擎忽略这种情况。正如你所看到的,我们还使用了 `g` 标记,因为我们要在整个输入字符串中搜索匹配。<pre>"The" => <ahref="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.</pre><pre>"/The/gi" => <ahref="#learn-regex"><strong>The</strong></a> fat cat sat on <ahref="#learn-regex"><strong>the</strong></a> mat.</pre>
<pre>
"The" => <ahref="#learn-regex"><strong>The</strong></a> fat cat sat on the mat.
</pre>
<pre>
"/The/gi" => <ahref="#learn-regex"><strong>The</strong></a> fat cat sat on <ahref="#learn-regex"><strong>the</strong></a> mat.
因为我们在正则表达式的末尾使用了 `g` 标记,它会从整个输入字符串中找到每个匹配项。<pre>".(at)" => The <ahref="#learn-regex"><strong>fat</strong></a> cat sat on the mat.</pre><pre>"/.(at)/g" => The <ahref="#learn-regex"><strong>fat</strong></a><ahref="#learn-regex"><strong>cat</strong></a><ahref="#learn-regex"><strong>sat</strong></a> on the <ahref="#learn-regex"><strong>mat</strong></a>.</pre>
<pre>
".(at)" => The <ahref="#learn-regex"><strong>fat</strong></a> cat sat on the mat.
</pre>
<pre>
"/.(at)/g" => The <ahref="#learn-regex"><strong>fat</strong></a><ahref="#learn-regex"><strong>cat</strong></a><ahref="#learn-regex"><strong>sat</strong></a> on the <ahref="#learn-regex"><strong>mat</strong></a>.