zoukankan      html  css  js  c++  java
  • 正则表达式之语法规则

    “正则表达式”描述在搜索文本正文时要匹配的一个或多个字符串。 该表达式可用作一个将字符模式与要搜索的字符串相匹配的模板。

    正则表达式包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”)。

    下表包含了多字符元字符的列表以及它们在正则表达式中的行为。

     

    元字符

    行为

    示例

    

    与一个字边界匹配;即字与空格间的位置。

    er 与“never”中的“er”匹配,但与“verb”中的“er”不匹配。

    B

    非边界字匹配。

    erB 与“verb”中的“er”匹配,但与“never”中的“er”不匹配。

    d

    数字字符匹配。

    等效于 [0-9]

    在搜索字符串“12 345”中,d{2}与“12”和“34”匹配。 d与“1”、“2”、“3”、“4”和“5”匹配。

    D

    非数字字符匹配。

    等效于 [^0-9]

    D+ 与“abc123 def”中的“abc”和“def”匹配。

    w

    与以下任意字符匹配:A-Z、a-z、0-9 和下划线。

    等效于 [A-Za-z0-9_]

    在搜索字符串“The quick brown fox…”中,w+与“The”、“quick”、“brown”和“fox”匹配。

    W

    与除 A-Z、a-z、0-9 和下划线以外的任意字符匹配。

    等效于 [^A-Za-z0-9_]

    在搜索字符串“The quick brown fox…”中,W+与“…”和所有空格匹配。

    [xyz]

    字符集。 与任何一个指定字符匹配。

    [abc] 与“plain”中的“a”匹配。

    [^xyz]

    反向字符集。 与未指定的任何字符匹配。

    [^abc] 与“plain”中的“p”、“l”、“i”和“n”匹配。

    [a-z]

    字符范围。 匹配指定范围内的任何字符。

    [a-z] 与“a”到“z”范围内的任何小写字母字符匹配。

    [^a-z]

    反向字符范围。 与不在指定范围内的任何字符匹配。

    [^a-z] 与不在范围“a”到“z”内的任何字符匹配。

    {n}

    正好匹配 n 次。 是非负整数。

    o{2} 与“Bob”中的“o”不匹配,但与“food”中的两个“o”匹配。

    {n,}

    至少匹配 次。 是非负整数。

    * 与 {0,} 相等。

    + 与 {1,} 相等。

    o{2,} 与“Bob”中的“o”不匹配,但与“foooood”中的所有“o”匹配。

    {n,m}

    匹配至少 n 次,至多 m 次。 n 和 m 是非负整数,其中 n <=m 逗号和数字之间不能有空格。

    ? 与 {0,1} 相等。

    在搜索字符串“1234567”中,d{1,3}与“123”、“456”和“7”匹配。

    (模式)

    模式 匹配并保存匹配项。 您可以从由 JScript 中的 exec Method返回的数组元素中检索保存的匹配项。 若要匹配括号字符 ( ),请使用“(”或者“)”。

    (Chapter|Section) [1-9]与“Chapter 5”匹配,保存“Chapter”以备将来之用。

    (?:模式)

    模式 匹配,但不保存匹配项;即不会存储匹配项以备将来之用。 这对于用“or”字符 (|) 组合模式部件的情况很有用。

    industr(?:y|ies) 与industry|industries 相等。

    (?=模式)

    正预测先行。 找到一个匹配项后,将在匹配文本之前开始搜索下一个匹配项。 不会保存匹配项以备将来之用。

    ^(?=.*d).{4,8}$ 对密码应用以下限制:其长度必须介于 4 到 8 个字符之间,并且必须至少包含一个数字。

    在该模式中,.*d 查找后跟有数字的任意多个字符。 对于搜索字符串“abc3qr”,这与“abc3”匹配。

    从该匹配项之前(而不是之后)开始,.{4,8} 与包含 4-8 个字符的字符串匹配。 这与“abc3qr”匹配。

    ^ 和 $ 指定搜索字符串的开始和结束位置。 这将在搜索字符串包含匹配字符之外的任何字符时阻止匹配。

    (?!模式)

    负预测先行。 匹配与模式 不匹配的搜索字符串。 找到一个匹配项后,将在匹配文本之前开始搜索下一个匹配项。 不会保存匹配项以备将来之用。

    (?!th)w+ 与不以“th”开头的单词匹配。

    在该模式中, 与一个字边界匹配。 对于搜索字符串“ quick ”,这与第一个空格匹配。(?!th) 与非“th”字符串匹配。这与“qu”匹配。

    从该匹配项开始,w+ 与一个字匹配。 这与“quick”匹配。

    cx

    匹配 x 指示的控制字符。 x 的值必须在 A-Z 或 a-z 范围内。如果不是这样,则假定 c 就是文本“c”字符本身。

    cM 与 Ctrl+M 或一个回车符匹配。

    xn

    匹配 n,此处的 n 是一个十六进制转义码。 十六进制转义码必须正好是两位数长。 允许在正则表达式中使用 ASCII 代码。

    x41 与“A”匹配。 x041 等效于后跟有“1”的“x04”(因为 n 必须正好是两位数)。

    num

    匹配 num,此处的 num 是一个正整数。 这是对已保存的匹配项的引用。

    (.)1 与两个连续的相同字符匹配。

    n

    标识一个八进制转义码或反向引用。 如果 n 前面至少有 n 个捕获子表达式,那么 n 是反向引用。 否则,如果 n 是八进制数 (0-7),那么 n 是八进制转义码。

    (d)1 与两个连续的相同数字匹配。

    nm

    标识一个八进制转义码或反向引用。 如果 nm 前面至少有 nm个捕获子表达式,那么 nm 是反向引用。 如果 nm 前面至少有n 个捕获子表达式,则 n 是反向引用,后面跟有文本 m 如果上述情况都不存在,当 n 和 m 是八进制数字 (0-7) 时,nm 匹配八进制转义码 nm

    11 与制表符匹配。

    nml

    当 n 是八进制数字 (0-3),m 和 l 是八进制数字 (0-7) 时,匹配八进制转义码 nml

    11 与制表符匹配。

    un

    匹配 n,其中 n 是以四位十六进制数表示的 Unicode 字符。

    u00A9 与版权符号 (©) 匹配。

    下表包含表示非打印字符的转义序列。

     

    字符

    匹配

    等效于

    f

    换页符。

    x0c 和 cL

    换行符。

    x0a 和 cJ

    回车符。

    x0d 和 cM

    s

    任何空白字符。 其中包括空格、制表符和换页符。

    [ f v]

    S

    任何非空白字符。

    [^ f v]

    Tab 字符。

    x09 和 cI

    v

    垂直制表符。

    x0b 和 cK

    正则表达式的计算方式与算术表达式非常类似;即从左到右进行计算,并遵循优先级顺序。

    下表按从高到低的顺序包含了正则表达式运算符的优先级顺序。

     

    运算符

    说明

    转义符

    (), (?:), (?=), []

    括号和中括号

    *、+、?、{n}、{n,}、{n,m}

    限定符

    ^、$、任何元字符

    定位点和序列

    |

    替换

    字符具有高于替换运算符的优先级,例如,允许“m|food”匹配“m”或“food”。

  • 相关阅读:
    HDU 1269 迷宫城堡
    HDU 4771 Stealing Harry Potter's Precious
    HDU 4772 Zhuge Liang's Password
    HDU 1690 Bus System
    HDU 2112 HDU Today
    HDU 1385 Minimum Transport Cost
    HDU 1596 find the safest road
    HDU 2680 Choose the best route
    HDU 2066 一个人的旅行
    AssetBundle管理机制(下)
  • 原文地址:https://www.cnblogs.com/milantgh/p/3637761.html
Copyright © 2011-2022 走看看