13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

你 可 以 通 过 创 建 一 个 正 则 表 达 式 ( 或 者 叫 regex) 来 声 明 一 个 模 式 , 然 后 <strong>Perl</strong> 的 正 则 表达 式 引 擎 ( 我 们 在 本 章 余 下 的 部 分 称 之 为 “ 引 擎 ”) 把 这 个 正 则 表 达 式 拿 过 并 判 断 模 式 是 否 ( 以及 如 何 ) 和 你 的 数 据 相 匹 配 。 因 为 你 的 数 据 可 能 大 部 分 由 文 本 字 串 组 成 , 所 以 你 没 有 理 由 不用 正 则 表 达 式 搜 索 和 替 换 任 意 字 节 序 列 , 甚 至 有 些 你 认 为 是 “ 二 进 制 ” 的 数 据 也 可 以 用 正 则 处理 。 对 于 <strong>Perl</strong> 而 言 , 字 节 只 不 过 碰 巧 是 那 些 数 值 小 于 256 的 自 然 数 而 已 。( 更 多 相 关 内容 见 第 十 五 章 ,Unicode。)如 果 你 通 过 别 的 途 径 已 经 知 道 正 则 表 达 式 了 , 那 么 我 们 必 须 先 警 告 你 在 <strong>Perl</strong> 里 的 正 则 表 达式 是 有 些 不 同 的 。 首 先 , 理 论 上 来 讲 , 它 们 并 不 是 完 全 “ 正 则 ” 的 , 这 意 味 着 <strong>Perl</strong> 里 的 正 则可 以 处 理 比 计 算 机 科 学 课 程 里 教 的 正 则 表 达 式 更 多 的 事 情 。 第 二 , 因 为 它 们 在 <strong>Perl</strong> 里 用 得实 在 是 太 广 泛 了 , 所 以 在 这 门 语 言 里 , 它 们 有 属 于 自 己 的 特 殊 的 变 量 , 操 作 符 , 和 引 用 习 惯 ;这 些 东 西 都 和 语 言 本 身 紧 密 地 结 合 在 一 起 。 而 不 象 其 他 语 言 那 样 通 过 库 松 散 地 组 合 在 一 起 。<strong>Perl</strong> 的 程 序 员 新 手 常 常 徒 劳 地 寻 找 地 这 样 的 函 数 :match( $string, $pattern );subst( $string, $pattern, $replacement );要 知 道 在 <strong>Perl</strong> 里 , 匹 配 和 子 串 都 是 非 常 基 本 的 任 务 , 所 以 它 们 只 是 单 字 符 操 作 符 :m/PATTERN/ 和 s/PATTERN/REPLACEMENT/( 缩 写 为 m// 和 s///)。 它 们 不 仅 语法 简 单 , 而 且 还 象 双 引 号 字 串 那 样 分 析 , 而 不 只 是 象 普 通 操 作 符 那 样 处 理 ; 当 然 它 们 的 操 作还 是 象 操 作 符 的 , 所 以 我 们 才 叫 它 们 操 作 符 。 你 在 本 章 通 篇 都 会 看 到 这 些 操 作 符 用 于 匹 配 字串 。 如 果 字 串 的 一 部 分 匹 配 了 模 式 , 我 们 就 说 是 一 次 成 功 的 模 式 匹 配 。 特 别 是 在 你 用 s/// 的时 候 , 成 功 匹 配 的 部 分 将 被 你 在 REPLACEMENT 里 声 明 的 内 容 代 替 。本 章 所 有 的 内 容 都 是 有 关 如 何 制 作 和 使 用 模 式 的 。<strong>Perl</strong> 的 正 则 表 达 式 非 常 有 效 , 把 许 多 含义 包 含 到 了 一 个 很 小 的 表 达 式 里 。 所 以 如 果 你 想 直 接 理 解 一 个 很 长 的 模 式 , 那 很 有 可 能 被 吓着 。 不 过 如 果 你 能 把 长 句 分 解 成 短 句 , 并 且 还 知 道 引 擎 如 何 解 释 这 些 短 句 , 那 你 就 能 理 解 任何 正 则 表 达 式 。 一 行 正 则 表 达 式 相 当 于 好 几 百 行 C 或 者 JAVA 程 序 并 不 罕 见 。 正 则 表 达式 可 能 比 一 个 长 程 序 的 单 一 一 行 要 难 理 解 , 但 是 如 果 从 整 体 来 看 , 正 则 表 达 式 通 常 要 比 很 长的 程 序 要 好 理 解 。 你 只 需 要 提 前 知 道 这 些 事 情 就 可 以 了 。5.1 正 则 表 达 式 箴 言在 我 们 开 始 讲 述 正 则 表 达 式 之 前 , 让 我 们 先 看 看 一 些 模 式 的 样 子 是 什 么 。 正 则 表 达 式 里 的 大多 数 字 符 只 是 代 表 自 身 。 如 果 你 把 几 个 字 符 排 在 一 行 , 它 们 必 须 按 顺 序 匹 配 , 就 象 你 希 望 的那 样 。 因 此 如 果 你 写 出 一 个 模 式 匹 配 :/Frodo/ ( 译 注 : 记 得 电 影 “ 魔 戒 ” 吗 ?;))145

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!