13.07.2015 Views

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

Perl 语言编程 - Linux教程

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

}5.2.3.2 当 全 局 替 换 不 够 “ 全 局 ” 地 时 候有 时 候 , 你 用 /g 不 能 实 现 全 部 修 改 的 发 生 , 这 时 要 么 是 因 为 替 换 是 从 右 向 左 发 生 的 , 要么 是 因 为 你 要 求 $` 的 长 度 在 不 同 的 匹 配 之 间 改 变 。 通 常 你 可 以 通 过 反 复 调 用 s/// 做 你想 做 的 事 情 。 不 过 , 通 常 你 希 望 当 s/// 失 败 的 时 候 循 环 停 下 来 , 因 此 你 必 须 把 它 放 进 条 件里 , 这 样 又 让 循 环 的 主 体 无 所 事 事 。 因 此 我 们 只 写 一 个 1, 这 也 是 一 件 无 聊 的 事 情 , 不 过有 时 候 无 聊 比 没 希 望 好 。 下 面 是 一 些 例 子 , 它 们 又 用 了 一 些 正 则 表 达 式 怪 兽 :# 把 逗 号 放 在 一 个 整 数 的 合 理 的 位 置1 while s/(\d)(\d\d\d)(?!\d)/$1,$2/;# 把 水 平 制 表 符 扩 展 为 八 列 空 间1 while s/\t+/' ' x (length($&)*8 - length($`)%8)/e;# 删 除 ( 嵌 套 ( 甚 至 深 层 嵌 套 ( 象 这 样 ))) 的 括 弧1 while s/\([^()]*\)//g;# 删 除 重 复 的 单 词 ( 以 及 三 重 的 ( 和 四 重 的 。。。))1 while s/\b(\w+) \1\b/$1/gi;最 后 一 个 需 要 一 个 循 环 是 因 为 如 果 没 有 循 环 , 它 会 把 :Paris in THE THE THE THE spring.转 换 成 :Paris in THE THE spring。这 看 起 来 会 让 那 些 懂 点 法 文 的 人 觉 得 巴 黎 位 于 一 个 喷 冰 茶 的 喷 泉 中 间 , 因 为 "the"( 法 文 )是 法 文 “tea” 的 单 词 。 当 然 , 巴 黎 人 从 来 不 会 上 当 。5.2.4 tr/// 操 作 符 ( 转 换 )162

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

Saved successfully!

Ooh no, something went wrong!