正则表达式

有关构造正则表达式的语法和规则的复习。

另请参阅配置分阶段网站的增量索引

常规表达式的语法

文本

任意单个字符

[字符]

字符类:字符之一

[^chars]

字符类:无字符

text1|text2

替代:text1或text2

量词

?

前文的0或1

*

0或前面的文本的N(N > 1)

+

前面的文本的1或N(N > 1)

分组

(text)

文本分组,设置替代项的边框,或返回引用,其中N组用于$N的RewriteRule的RHS上)

锚点

^

开始行锚点。

$

行锚点结束。

逃跑

\char

避开特定字符。 例如,指定字符“”。[] ()"等。

常规表达式规则

  • 普通字符(不是下面描述的特殊字符之一)是与自身匹配的单字符常规表达式。

  • 反斜杠()后跟任何特殊字符是与特殊字符本身匹配的单字符常规表达式。 特殊字符包括:

    • . (句点)、 * (星号)、 ? (问号)、 + (加号)、 [ (左方括号)、 | \ (垂直管道)和(反斜杠)始终是特殊字符,但方括号内显示的字符除外。

    • ^ (尖角或绕圆弧)在常规表达式的开头或紧靠两个方括号的左侧时特别。

    • $ (美元符号)在常规表达式结束时特别。

    • . (句点)是与任何字符匹配的单字符常规表达式符,包括新行除外的补充代码集字符。

    • 包含在[ ](左方括号和右方括号)中的非空字符串是与该字符串中的一个字符(包括补充代码集字符)匹配的单字符常规表达式。

      但是,如果字符串的第一个字符是^(外框),则单字符常规表达式符匹配任何字符,包括补充代码集字符,但新行和字符串中的其余字符除外。

      ^仅在字符串中出现时具有此特殊含义。 可以使用-(减号)来指示连续字符的范围,包括补充代码集字符。 例如,[0-9]等效于[0123456789]。

      指定范围的字符必须来自同一代码集。 当字符来自不同的代码集时,将匹配指定范围的字符之一。 如果-是第一个(在初始^之后,如果有)或最后一个出现在字符串中,则它将丢失此特殊含义。 当](右方括号)是字符串中第一个字符时,在初始^之后(如果有),不终止此字符串。 例如,[]a-f]](右方括号)或ASCII字母a至f(含a)匹配。 上面作为特殊字符列出的四个字符代表在这样的字符串中。

从单字正则表达式构造正则表达式的规则

您可以使用以下规则从单字符常规表达式构建常规表达式:

  • 单字符常规表达式是与单字符常规表达式匹配的常规表达式。
  • 单字符常规表达式后跟*(星号)是与单字符常规表达式的零个或多个匹配的常规表达式,该字符可以是补充代码集字符。 如果有任何选择,则选择允许匹配的最左边的最长字符串。
  • 单字符常规表达式,后跟?(问号)是与单字符常规表达式零或一个匹配的常规表达式,该正则可以是补充代码集字符。 如果有任何选择,则选择允许匹配的最左边的最长字符串。
  • 单字符常规表达式后跟+(加号)是与单字符常规表达式的一个或多个匹配的常规表达式,该字符可以是补充代码集字符。 如果有任何选择,则选择允许匹配的最左边的最长字符串。
  • 单字符常规表达式,后跟{m}{m,}{m,n}是与单字符常规表达式的出现范围相匹配的常规表达式。 m和n的值必须是小于256的非负整数;{m}与m个匹配;{m,}至少匹配m次;{m,n}匹配m和n(含m和n)之间的任意次数。 只要存在选择,常规表达式会匹配尽可能多的匹配项。
  • 正则表达式的串连是一个正则表达式,它与正则表达式的每个组件所匹配的字符串的串的串连相匹配。
  • 在字符序列(和)之间包含的常规表达式是与任何无点缀的常规表达式匹配的常规表达式。
  • 常规表达式后跟|(垂直管道),后跟常规表达式是与第一常规表达式(垂直管道之前)或第二常规表达式(垂直管道之后)相匹配的常规表达式。

您还可以限制常规表达式,使其仅匹配行的初始段或最终段,或两者。

  • 常规表达式开头的^(绕过)限制该常规表达式与行的初始段匹配。
  • 整个常规表达式末尾的$(美元符号)限制该常规表达式与行的最终段匹配。
  • 构造“正则表达式$”将限制常规表达式与整行匹配。

有一些预定义的字符类名称,可用来代替复杂括号内的常规表达式。 例如,数字可以由单字符正则表达式[0-9]或字符类一字符正则表达式[[:digit:]]表示。

预定义的字符类及其含义如下:

字符类

含义

[[:alnum:]]

字母字符或数字。

[[:alpha:]]

字母字符。

[[:空:]]

空格或选项卡。

[[:cntrl:]]

控制代码;非打印字符。

[[:digit:]]

数字。

[[:graph:]]

除空格外的任何打印字符。

[[:小写:]]

小写字母字符。

[[:打印:]]

任何打印字符,包括空格。

[[:punct:]]

标点。

[[:空格:]]

空白,如空格、制表符或行尾。

[[:upper:]]

大写字母字符。

[[:xdigit:]]

十六进制数字,大写或小写。

两个特殊字符类名称匹配单词开始和结尾处的空格。 换句话说,它们与实际字符不匹配。 单词被视为字母字符、数字或下划线(_)的任意序列。

字符类

含义

[[:<:]]

单词开始

[[:>:]]

词尾

在此页面上