分享

查找和替换:正则表达式

 Blex 2012-03-15

通过使用正则表达式,可以在 Microsoft FrontPage 中执行繁复的查找和替换操作。正则表达式是在搜索文本或代码的过程中,说明要查找的一个或多个字符串范式,它由普通字符和特殊字符组成。如果您不知道所要 查找的确切文本或代码,或者如果您正在查找文本或代码字符串的多种类似情况时,可以使用正则表达式。

若要使用正则表达式,请打开 FrontPage 中的“查找和替换”对话框,选择“正则表达式”复选框,并在“查找内容”框中键入一个正则表达式范式。通过“正则表达式”箭头,可以访问部分常用语法字符。

在搜索中使用正则表达式时,特定的规则将控制哪些字符组合执行哪些特定的匹配操作。每种正则表达式(或正则表达式组合)都要称为语法。可以在一个语法中使用多个正则表达式以精确匹配您所要搜索的目标。

下表说明了 FrontPage 的正则表达式和相关的语法。

表达式 语法 说明
任何字符 . 作为通配符,可匹配除换行符 (\n) 以外的任何单个打印或非打印字符。

例如,正则表达式DE>c.tDE>可匹配 cat、c t、cot 等字符串,但不匹配 cost。本例中,句号 (.) 是一个代表单个字符的通配符。它出现在字母 'c' 和 't' 之间,因此,字符 'c' 和 't' 之间的任何单个字符都与表达式匹配——即使是空格也一样。

最多——零个或多个 * 匹配此表达式前一字符的零次或多次出现,可匹配尽可能多的字符。

正则表达式 DE>.*DE> 匹配一个字符的零次或多次出现。

例如,正则表达式 DE>b.*kDE> 可以匹配 book、back、black、blank 和 buck。本例中,我们将句号 (.) 与星号 (*) 组合为一个语法。句号 (.) 后面紧接着星号 (*) 表达式。星号 (*) 匹配 'b' 和 'k' 间任何字符的零次或多次出现。句号 (.) 是 'b' 和 'k' 之间字符的通配符。本例中,这表示在 'b' 和 'k' 间可以重复出现任何字符。

最多——一个或多个 + 匹配此表达式前一字符的一次或多次出现,可匹配尽可能多的字符。

正则表达式 DE>.*DE> 匹配一个字符的一次或多次出现。

例如,正则表达式 DE>bo+.DE> 可以匹配 bob、book 和 boot。本例中,我们将句号 (.) 与加号 (+) 组合为一个语法。加号 (+) 表达式后面紧接着句号 (.)。加号 (+) 匹配字母 'o' 的一次或多次出现。句号 (.) 是每个单词最后一个字符的通配符,在本例中为 'b'、'k' 和 't'。

最少——零个或多个 @ 匹配此表达式前一字符的零次或多次出现,可匹配尽可能少的字符。

正则表达式 DE>.@DE> 表示匹配一个字符的零次或多次出现。

例如,正则表达式 DE>a.@xDE> 匹配 'abxbxb' 中的 'abx' 和 'acxcxc' 中的 'acx'。本例中,我们将句号 (.) 与 at 符 (@) 组合为一个语法。句号 (.) 后面紧接着 at 符 (@) 表达式。at 符 (@) 匹配 'a' 和 'x' 间任何字符零次或多次出现。本例中,句号 (.) 是 'a' 和 'x' 之间字符 'b' 和 'c' 的通配符。

最少——一个或多个 # 匹配此表达式前一字符的一次或多次出现,可匹配尽可能少的字符。

例如,正则表达式 DE>si.#erDE> 匹配 'sicker' 或 'silkier'。句号 (.) 与井字符 (#) 组合为一个语法。句号 (.) 后面紧接着井字符 (#) 表达式。井字符 (#) 匹配 'si' 和 'er' 之间任何字符的一次或多次出现。句号 (.) 是通配符,在单词 'sicker' 中代表字符 'c' 和 'k',在单词 'silkier' 中代表字符 'l'、'k' 和 'i'。

字符集 [ ] 匹配括号 ([ ]) 内的任意一个字符。可以使用连字号 (-) 指定字符的范围,例如 DE>[a-z]DE>。

例如:

  • 正则表达式 DE>c[aou]tDE> 可以匹配 cat、cot 和 cut,但不能匹配 cet 或 cit。
  • 正则表达式 [0-9] 表示匹配任意一个数字。
  • 也可以指定多个字母范围。正则表达式 DE>[A-Za-z] DE>表示匹配所有大写和小写字母。

行首 ^ 将匹配定位于行首。

例如,正则表达式 DE>^When inDE> 匹配以“When in”作为开始且出现于行首的任何字符串,例如“When in the course of human events”或“When in town, call me”。然而,此正则表达式不匹配出现于行首的“What and when in the course of human events”。

行尾 $ 将匹配定位于行尾。

例如,正则表达式 DE>professional$DE> 可匹配字符串“He is a professional”,但却不匹配字符串“They are a group of professionals”。

文件开头 ^^ 将匹配定位于文件开头。仅适用于在源代码或文本文件中搜索文本。

例如,若要匹配文件开头的第一个 HTML 标记,可使用下列正则表达式:DE>^^<html>DE>

文件末尾 $$ 将匹配定位于文件末尾。仅适用于在源代码或文本文件中搜索文本。

例如,若要匹配文件末尾的最后一个 HTML 标记(标记后没有空格),可使用下列正则表达式:DE></html>$$DE>

或者 | 表示在两项间进行选择,即匹配 OR 符号 (|) 前面或后面的表达式。

例如,正则表达式 DE>(him|her) DE>匹配下列情况:

  • “it belongs to him”
  • “it belongs to her”

但它不能匹配“it belongs to them”。

转义特殊字符 \ 匹配反斜线 ( \ ) 后面的字符。这样可允许您查找正则表达式语法中使用的字符(如左大括号 ({) 或插字号 (^))或其他一些特殊字符。

例如,可使用 DE>\$DE> 匹配美元符号 ($) 而不会让正则表达式“定位于行尾”。同样,可使用表达式 DE>\.DE> 匹配句号 (.) 字符而不是任意单个字符(句号 (.) 表达式功能)。

标记的表达式 {} 对与括号内表达式匹配的文本加标记。可以在“查找”表达式中匹配其他处的标记文本或者使用 \N 将标记文本插入“替换”表达式。

例如,假设您要查找连续出现两次的单词。若要搜索,请使用下列表达式:DE>{.#} \1DE>

假设连续出现的单词由一个空格隔开,则需要在右侧大括号与反斜线之间添加一个空格。

本例中,我们将带有大括号 ({}) 的井字符 (#) 与句号 (.) 组合为一个语法。在此表达式中,DE>.#DE> 表示任何连续的字符。由于表达式的此部分括有大括号 ({}),连续的字符可被标记起来并被指定为 \1。此表达式将查找跟随空格的任何连续字符,且其后紧接着完全相同的该字符序列。

第 N 个标记表达式 \N 在“查找”表达式中,\N 匹配由第 N 个标记表达式指定的文本,其中 N 是 1 到 9 的数字。

在“替换”表达式中,\N 插入由第 N 个标记表达式指定的文本,其中 N 是 1 到 9 的数字。\0 插入整个“查找”表达式指定的文本。

例如,假设要查找连续出现两次的单词,并使用一个单词替换它们。若要搜索,请使用下列表达式:DE>{.#} \lDE>

假设连续出现的单词由一个空格隔开,则需要在右侧大括号与反斜线之间添加一个空格。本例中,我们将带有大括号 ({}) 的井字符 (#) 与句号 (.) 组合为一个语法。

若要替换,请使用下列表达式:DE>\lDE>

\1 表示在查找字符串中第一个大括号部分找到的内容。通过在替换操作中使用 \1,实际上是将连续出现两次的单词替换为一个单词。

组表达式 ( ) 标记子表达式的开始和结束。

子表达式是包含在括号 ( ) 中的正则表达式,例如下列表达式:DE>(ha)+DE>。本例中,我们将带有括号组合 ( ) 的加号 (+) 组合为一个语法。此子表达式为 (ha),因为它包含在括号 ( ) 中。当您添加加号 (+) 时,该表达式可以查找重复的字母对。加号 (+) 表示重复出现一次或多次的 'ha'。

此表达式匹配下列情形:'haha' 和 'hahaha'。

防止匹配 ~x 当 x 出现在表达式的该位置时会防止匹配。

例如,正则表达式 DE>real~(ity)DE> 匹配 "realty" 和 "really" 中的 "real",但却不匹配 "reality" 中的 "real"。

换行符 \n 匹配“代码”视图中的换行符或“设计”视图中的 <br>。

语法 (\n) 是匹配所有换行符的简便方法。

制表符 \t 匹配单个制表符。

例如,如果要查找所有位于行首的制表符,可使用下列正则表达式:

DE>^\t+DE>

本例中,我们将带有制表符 (\t) 的插字符 (^) 与加号 (+) 组合为一个语法。插字符 (^) 位于单个制表符字符表达式之前,用于匹配位于行首的所有制表符。加号 (+) 表示匹配一个或多个制表符字符。

任何一个不属于该集合的字符 [^] 匹配任何一个不属于插字号 (^) 后面的字符集的字符。

例如,若要匹配范围之外的任何字符,可使用插字号 (^) 作为左侧中括号后面的第一个字符。表达式 DE>[^269A-Z]DE> 匹配除 2、6、9 和任何大写字母之外的所有字符。

重复表达式 ^n 匹配插字号 (^) 前面的表达式的 n 次出现。

例如,若 n 为 4,表达式 DE>[0-9]^4DE> 匹配任何 4 位数序列。在本例中,我们将字符集 ([ ]) 语法与重复 (^n) 语法组合以展示一个正则表达式的实用方法。

字母数字字符 :a 匹配表达式 DE>[a-zA-Z0-9]DE>。

可以使用表达式 DE>[a-zA-Z0-9]DE> 匹配出现一次的字母(大写或小写)或数字。也称为字母数字序列。可使用简写表达式 DE>:aDE> 代替 DE>[a-zA-Z0-9]DE>。

空格 :b 匹配代码或文本中的空格。

例如,若要匹配行首的单个空格字符,可使用下列正则表达式:DE>^:bDE>

字母字符 :c 匹配表达式 DE>[a-zA-Z]DE>。使用此表达式可匹配所有大写或小写字母。

可以使用简写表达式 DE>:cDE> 代替所有 DE>[a-zA-Z]DE>。

十进制数 :d 匹配表达式 DE>[0-9]DE>。此表达式可匹配任何数字。

例如,假设您需要在文本文件中搜索社会福利号。美国的社会福利号的格式为 999-99-9999。DE>:d^3-:d^2-:d^4DE> 或 DE>[0-9]^3-[0-9]^2-[0-9]^4]DE>(使用 [0-9] 表示)可返回相同结果。

可使用简写表达式 DE>:dDE> 代替所有 DE>[0-9]DE>。

十六进制数 :h 匹配表达式 DE>[0-9a-fA-F]+DE>

使用此表达式可匹配由 'A' 和 'F' 间的大写或小写字母和任意数字组成的十六进制数。

例如,假设网站中的网页拥有多种不同的背景颜色,而您要将这些网页的颜色更改为空白(如 000000)。但是,您不知道现有颜色值的十六进制。使用下列正则表达式可查找所有现有十六进制值:

DE>\#:hDE>

可以使用 [0-9a-fA-F] 搜索,但在本例中我们将反斜线 (\) 和带有十六进制数字 (:h) 语法组合在一起。\# 匹配非表达式井字符 (#),而 :h 匹配任何十六进制字符序列。

若要替换现有十六进制数值,可键入所需背景颜色的十六进制数值: DE>000000DE>

标识符 :i 匹配表达式 DE>[a-zA-Z_$][a-zA-Z0-9_$]*DE>

处理代码时,如果需要匹配所有程序标识符,则可使用简写表达式 DE>:i DE>,而无需键入上述冗长的表达式。

有理数 :n 匹配表达式 DE>([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)|([0-9]+)DE>

如果需要匹配包含小数点的整个数值,可使用简写表达式 DE>:nDE>,而无需键入上述冗长的表达式。

引起的字符串 :q

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多