文本匹配入门教程
Previous Back to contents Next

对于没接触过匹配语言的人来说,文本匹配可能会显得比较神秘,但是它的实现方式其实很简单。每个被称作通配符元字符的特定字符都有特殊的含义。每个特定字符在特定条件下都匹配部分原文本。被匹配的文本则被其他文本替换。

例如:星号 "*" 可以匹配任意长度的任意字符。它通常用来匹配一段未知文本。又例如:当需要匹配任意以 "ko" 结尾的单词时, "*ko" 可以匹配 "Naoko" 或 "Atsuko" ,但不能匹配 "Michie" ,因为它的结尾不是 "ko" 。又如, "john*smith" 可以匹配 "John W Smith" , "John 'Bubba' Smith" ,还有 "John Smith" 。

用这个方式处理HTML代码 - 例如想要匹配所有的图像标签。记住图像标签一定是以 "<img" 开始而以 ">"结束的,在中间可以有任意字符。这时可以用匹配表达式 "<img * >" 。 也就是说, "<img * >" 可以用来匹配...

任意以 <img 开头,中间含任意字符,以 ">" 结尾的标签。

接下来,在替换文本里你就可以把所有的图像标签都重写成你希望的任意形式。你甚至可以 "捕获" 你希望保留的部分原文本(例如图像的URL地址)以在替换文本中使用。请看下面这个例子...

Matching: <img * src=(\w)\1 * >
Replace: <img src=\1 border=1 >

在这个例子里出现了几个新的通配符。首先, "\w"(又叫作单词匹配)可以匹配任意一个连续不间断,中间无空格的字符 - 这在匹配URL的时候很有用。一对半角括号 "( ... )" 后面加上 "\1" 基本意思是 "把在括号里的所有字符都保存到变量1"。接下来在替换文本里, "\1" 就可以把保存起来的那段字符插入到\1本身所在的位置。 Proxomitron 的匹配语言支持从 \0 到 \9,一共10个变量。

举一个实例,上面的那个规则可以像下面这样,把...

<img align=left src="bison.gif" alt="My pet bison Phil" >

重写为

<img src="bison.gif" border=1 >

第一个 "*" 匹配 蓝色部分
"(\w)\1" 匹配 红色部分
第二个 "*" 匹配 绿色部分

注意匹配文本里没有蓝色和绿色部分。只有我们用变量保存的部分保留了下来。通过删除部分代码,保留部分代码,我们可以完全重写网页的HTML。例如,想要把上面的图片 bison.gif 替换为一个可点击的链接时,我们可以把替换文本写为...

Replace: <a href=\1 > a picture </a>

译注:注意由于Proxomitron在匹配文本中不直接支持中文,这里必须替换为英文"a picture",而不是中文的"图片"。如何在匹配文本中插入中文,可以参考"匹配命令"一节中的"$UESC"

同样的代码...

<img align=left src="bison.gif" alt="My pet bison Phil" >

就会变为...

<a href="bison.gif" > a picture </a>

希望这些会给你一个简短的印象告诉你匹配如何工作的。继续阅读 元字符 一节如何对具体实例进行匹配。

跳转至 匹配规则


返回目录