LOGO
首页 小说列表 排行榜 搜索

    cxlrpgxp-第2页  护眼阅读

  • 第1页
  • 上一页
  • 下一页

    温馨提醒:系统正在全面升级。您可以访问最新站点。谢谢!

      m 回以上、最大 n 回

      (尽量匹配短的部分)。

      ?

      负责指定数量(quantifiers)。表示前面子表达式至多出现 1 次。

      ??

      负责指定数量(quantifiers)。表示前面子表达式至多出现 1 次(尽量匹配短的部分)。

      |

      选择(alternative)。

      ( )

      正则表达式的群组化。与括号中的正则表达式相匹配的字符串将被保存下来,供后向引用使用。

      \1, \2 ... \n

      后向引用(back reference)。请参考后向引用。

      (?# )

      注释。括号中的任意字符串将被忽视。

      (?: )

      不具备后向引用功能的群组化。它不为 \1,\2(或 $1,$2)提供服务,是一种单纯的群组功能。

      /(abc)/ =~ "abc"

      p $1

      => "abc"

      /(?:abc)/ =~ "abc"

      p $1

      => nil

      (?= )

      先行(lookahead)。使用 pattern 指定位置(不留间隔)。

      (?=re1)re2

      表示同时匹配 re1 和 re2 的正则表达式。

      re1(?=re2)

      表示在后面紧跟着匹配 re2 字符串的正则表达式 re1。

      p /foo(?=bar)/ =~ "foobar" # => 0

      p $& # => "foo" (没有 bar 部分的信息)

      (?! )

      否定先行(negative lookahead)。使用否定的 pattern 来指定位置(不留间隔)。

      (?!re1)re2

      表示不匹配 re1 匹配 re2 的正则表达式。

      # 除 000 以外的 3 位数字

      re = /(?!000)\d\d\d/

      p re =~ "000" # => nil

      p re =~ "012" # => 0

      p re =~ "123" # => 0

      # C 语言标识符(首位是[A-Za-z_]然后是[0-9A-Za-z_]的字符串)

      /\b(?![0-9])\w+\b/

      (?ixm-ixm)

      正则表达式中的 i 选项、x 选项、m 选项的开关。请您参考正则表达式字面值来了解选项的详细内容。

      re = /A(?i)a(?-i)A/

      p re =~ "AaA" # => 0

      p re =~ "AAA" # => 0

      p re =~ "AAa" # => nil

      (?ixm-ixm: )

      括号中的 i 选项、x 选项、m 选项的开关。在括号范围内有效。

      re = /A(?i:a)A/

      p re =~ "AaA" # => 0

      p re =~ "AAA" # => 0

      p re =~ "AAa" # => nil

      后向引用正则表达式 \1 \2 ... \n 表示后向引用。\n 表示将匹配第 n 个括号(正则表达式的()表示群)的内容保存起来,供后面使用。

      /((foo)bar)\1\2/

      和

      /((foo)bar)foobarfoo/

      是一样的。

      例子:

      re = /(foo|bar|baz)\1/

      p re =~ 'foofoo' # => 0

      p re =~ 'barbar' # => 0

      p re =~ 'bazbaz' # => 0

      p re =~ 'foobar' # => nil

      对应的括号必须位于后向引用表达式的左侧。

      若后向引用表达式位于对应的括号中时,匹配常常会失败。当后向引用表达式中的数字是 1 位,且没有对应的括号时,匹配也将失败。

      p /(\1)/ =~ "foofoofoo" # => nil

      p /(foo)\2/ =~ "foo\2" # => nil

      虽然可以指定 2 位以上的后向引用表达式,但是不要把它同控制码的 \nnn(对应于八进制数 nnn 的字符)混为一谈。当数字只有 1 位时,通常是后向引用表达式。当指定了一个超过 2 位的数字时,若没有对应括号的话,则被看作是八进制代码。

      相反地,若在正则表达式中使用 1 位的八进制代码时,必须以 0 打头,例如 \01 等(不可能存在形如 \0 这样的后向引用表达式,因此不会混淆)。

      p /\1/ =~ "\1" # => nil # 无对应括号的后向引用

      p /\01/ =~ "\1" # => 0 八进制代码

      p /\11/ =~ "\11" # => 0 八进制代码

      # 八进制代码(因为没有对应括号)

      p /(.)\10/ =~ "1\10" # => 0

      # 后向引用(因为有对应的括号)

      p /((((((((((.))))))))))\10/ =~ "aa" # => 0

      # 八进制代码(因为没有像 "\0" + "8" -> \08 这样的八进制代码)

      p /(.)\08/ =~ "1\0008" # => 0

      # 如果想在后向引用表达式之后插入数字的话,就必须使用括号加以分隔。

      p /(.)(\1)1/ =~ "111" # => 0

      字符簇正则表达式 [] 负责指定字符簇。这将匹配 [] 内列出的任何一个字符。

      例如 /[abc]/ 表示只要匹配 "a"、"b"、"c" 中任何一个即可。也可以按照 ASCII 代码顺序,在连续的字符串之间插入“-”后写成 /[a-c]/ 也是一样的效果。另外,若开头是“^”的话,表示要匹配指定字符之外的一个字符。

      若“^”不在开头的话,表示匹配该字符本身。同时,当“-”出现在头或尾上时,表示匹配该字符本身。

      p /[a^]/ =~ "^" # => 0

      p /[-a]/ =~ "-" # => 0

      p /[a-]/ =~ "-" # => 0

      p /[-]/ =~ "-" # => 0

      空的字符簇将会引发错误。

      p /[]/ =~ ""

      p /[^]/ =~ "^"

      # => invalid regular expression; empty character class: /[^]/

      当“]”出现在开头(或否定的“^”之后)时,表示“]”本身,而并非字符范围的结尾。这样的“]”推荐使用反斜线符号进行转义。

      p /[]]/ =~ "]" # => 0

      p /[^]]/ =~ "]" # => nil

      可以使用反斜线符号对 "^"、"-"、"]" 以及 "\\"(反斜线符号)进行转义,使其匹配该字符本身。

      p /[\^]/ =~ "^" # => 0

      p /[\-]/ =~ "-" # => 0

      p /[\]]/ =~ "]" # => 0

      p /[\\]/ =~ "\\" # => 0

      在 [] 中同字符串一样可以使用控制码,以及正则表达式 \w、\W、\s、\S、\d、\D(这些都是表示字符簇的简写法)。

  • 第1页
  • 上一页
  • 下一页
联系我们

电话: 400-123-4567

工信备案:(湘ICP备2021002763号-1)

©版权所有2018-2026

技术支持:近思之

友情链接
微信 | 微博2718920