Show Menu
主题×

正则表达式

有关构造正则表达式的语法和规则的复习。
正则表达式的语法
文本
任意单个字符
[字符]
字符类:字符之一
[^chars]
字符类:无字符
text1|text2
备选方案:text1或text2
数量表示符
?
0或1个以上文本
*
0或N(N > 1)
+
1或N(N > 1)
分组
(text)
文本分组,设置替代项的边框,或返回引用,其中N组用于RewriteRule的RHS,且$N)
锚点
^
行的开头锚点。
$
行锚点结束。
逃生
\char
避开特定的字符。 例如,指定字符“”。[] ()"等。
正则表达式规则
  • 普通字符(不是下面描述的特殊字符之一)是与自身匹配的单字符正则表达式。
  • 反斜杠(\)后跟任何特殊字符是与特殊字符本身匹配的单字符正则表达式。 特殊字符包括:
    • . (句点)、 * (星号)、 ? (问号)、 + (加号)、 [ (左方括号)、 | (垂直管道)和 \ (反斜杠)始终是特殊字符,但方括号内显示的字符除外。
    • ^ (尖角或外括号)在正则表达式的开头特殊,或者当它紧跟在一对方括号的左侧时。
    • $ (美元符号)在正则表达式的结尾处是特殊的。
    • . (句点)是与任何字符匹配的单字符正则表达式,包括新行除外的补充代码集字符。
    • 包含在(左方括号和右方括号)中的非空字符串是一个单字符正则表达式,它匹配该字符串中的一个字符,包括补充代码集字符。 [ ]
      但是,如果字符串的第一个字符是 ^ (condflex),则单字符正则表达式将匹配任何字符,包括补充代码集字符,但新行和字符串中的其余字符除外。
      仅当 ^ 字符串中的第一个出现时,才具有此特殊含义。 您可以使 - 用(减号)来指示一系列连续字符,包括补充代码集字符。 例如, # 等于 #
      指定范围的字符必须来自同一个代码集。 当字符来自不同的代码集时,将匹配指定范围的字符之一。 如果 - 它是在字符串中出现的第一个(在初始值之后,如 ^ 果有)或最后一个,则会丢失此特殊含义。 如果 ] 字符串是其中第一个字符,则(右方括号)不终止该字符串(如果有),但是它是初始字符 ^ 后的第一个字符。 例如, #a-f]匹配 ] (右方括号)或ASCII字母a至f(含)之一。 上面作为特殊字符列出的四个字符代表在这样的字符串中。
用单字符正则表达式构造正则表达式的规则
您可以使用以下规则从单字符正则表达式构建正则表达式:
  • 单字符正则表达式是与单字符正则表达式匹配的任意正则表达式。
  • 单字符正则表达式后跟 * (星号)是与单字符正则表达式的零个或多个出现匹配的正则表达式,该正则表达式可以是补充代码集字符。 如果有任何选择,则选择允许匹配的最左边的最长字符串。
  • 单字符正则表达式后跟 ? (问号)是与单字符正则表达式的零或一个匹配的正则表达式,该正则表达式可以是补充代码集字符。 如果有任何选择,则选择允许匹配的最左边的最长字符串。
  • 单字符正则表达式后跟 + (加号)是与单字符正则表达式的一个或多个实例相匹配的正则表达式,该单字符正则表达式可以是补充代码集字符。 如果有任何选择,则选择允许匹配的最左边的最长字符串。
  • 单字符正则表达式后跟 {m} {m,} {m,n} 是与单字符正则表达式的出现范围相匹配的正则表达式。 m和n的值必须为小于256的非负整数;匹 {m} 配m个匹配项;匹 {m,} 配至少m次;匹 {m,n} 配m和n(含m和n)之间的任意次数。 只要存在选择,正则表达式就匹配尽可能多的实例。
  • 正则表达式的连接是一个正则表达式,它与正则表达式的每个组件所匹配的字符串的连接相匹配。
  • 包含在字符序列(和)之间的正则表达式是与无点的正则表达式匹配的任何正则表达式。
  • 正则表达式后跟 | (垂直管道)和正则表达式是与第一正则表达式(垂直管道之前)或第二正则表达式(垂直管道之后)匹配的正则表达式。
您还可以限制正则表达式仅匹配行的初始段或最终段,或两者。
  • ^ 则表达式开头的(condiflex)限制该正则表达式与行的初始段匹配。
  • $ 个正则表达式末尾的(美元符号)限制该正则表达式匹配行的最终段。
  • 构造“正则表达式$”限制正则表达式匹配整行。
有一些预定义的字符类名称,可用来代替复杂的带括号的正则表达式。 例如,数字可以由单字符正则表达式 # ,或由字符类单字符正则表达式[ #]表示。
预定义的字符类及其含义如下:
字符类
含义
[[:alnum:]]
字母字符或数字。
[[:alpha:]]
字母字符。
[[:空:]]
空格或制表符。
[[:cntrl:]]
控制代码;非打印字符。
[[:dig:]]
数字。
[[:graph:]]
除空格外的任何打印字符。
[[:小写:]]
小写字母字符。
[[:打印:]]
任何打印字符,包括空格。
[[:punct:]]
标点。
[[:空格:]]
空白,如空格、制表符或行尾。
[[:upper:]]
大写字母字符。
[[:xdigit:]]
十六进制数字,大写或小写。
两个特殊字符类名称与单词开头和结尾处的空格相匹配。 换句话说,它们与实际字符不匹配。 单词被视为字母字符、数字或下划线(_)的任意序列。
字符类
含义
[[:<:]]
一个字的开头
[[:>:]]
一个字结尾