不知大家有没试过这样的经历:想替换一些有固定规律文本,但又不是想全部替换掉原来的内容。只是想替换掉其中的一部分,而保留一部分。例如,文本“ aaaDSSDaabbbbbbbbbbbbbbXXX”,我只是想把所有包含这个文本的页面替换成“原来的文本”,即保留原来区域的内容。以前遇到过这样的情况,不知道该怎么做,上网搜过,也没搜到。今天试了一下,行了。所以就把它写出来,分享一下,希望能有点作用。
没错,就是用正则表达式。但一般的文本替换工具不支持正则表达式的查找与替换。手动改的话,如果页面少的话还勉强,但如果是50个甚至更多的页面都要改呢?呵,,吐血行了。幸好,Dreamweaver给我们提供了强大正则查找替换功能。它不仅能批量替换普通文本,而且还能灵活应用正则表达式进行批量替换。
那要怎样支替换呢?以开始那个例子说明(注:我用的是Adobe Dreamweaver CS3):
1.打开“查找和替换”对话框
2.在“查找范围”选项中选择“文件夹”,然后选择要进行批量替换的文件夹(当然,也可以选择“当前文档”)
3.在“查找”中加入: ([A-z]*)
4.在“替换”中加入:$1
5.在“选项”中选择“使用正则表达式”(请注意,一定要选择这个哦)
6.单击“全部替换”就行了。
分析:
整个过程中,最重要是第三和第四步。在第三步中,用到了正则 ([a-z]*)。这是什么意思呢?根据正则语法:
(pattern)--匹配pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。注意,在Dreamweaver中是从$1开始的。
[xyz] -- 匹配所包含的任意一个字符。[A-z]就表示匹配任意大小写英文字符。
* -- 匹配前面的子表达式零次或多次,在本例中就是匹配[a-z]零次或多次。
整个表达式([A-z]*)就表示:匹配任意多个连续的大小写英文字符,并且所产生的区配可以从Matches中得到。
由上面的解释,很容易就能知道,第四步中的$1代表的是Matches集合中的第一个匹配。在本例中也就是任意多个连续的英文字符。至于详细的正则表达式语法,可以到网上查找,或许下个 JavaScript.chm里面也能找到,我在这里就不展开了。
另外,说来也搞笑,刚学正则的时候,总是不知道怎样匹配 任意文本。后来经过一番研读,终于给匹配出来了,其实说来也很简单,不就是任意非空白字符和空白字符的组合嘛:([\s\S]*)
还有要提醒一下大家的是,如果要进行上面的那种标签形式,Dreamweaver还提供了另外一种更为直观的方法,具体我也不多话,在“查找和替换”的“搜索选项中选择“指定标签”就会看到。
总结:Dreamweaver提供了非常强大的查找与替换功能。灵活的运用它提供的各种方法,将会给工作带来更多的便利。
例:
网页1:<TITLE>教学网</TITLE><h1>珍视学生的自主阅读</h1>网页2: <TITLE>教学网</TITLE><h1>做一个热爱读书的学生</h1> 如上,我有一组静态网页,TITLE标签内全部相同,想用h1标签中的标题文本,批量替换TITLE标签中的标题文本。请问,如何用DW正则表达式批量操作!
查找
<TITLE>.*?</TITLE>([\s\S]*?)<h2>(.*?)<\/h2>
替换为
<TITLE>$2</TITLE>$1<h2>$1</h2>
记得勾选上 使用正则表达式
Dreamweaver替换正则表达式表
下表列出了在正则表达式中使用的特殊字符、其含义和用法示例。若要搜索包含该表中某一特殊字符的文本,请在特殊字符前面附加一个反斜杠,令其“转义 ”。例如,若要在 some conditions apply* 短语中搜索实际的星号,您的搜索模式应类似于:apply\*。如果您没有令星号转义,您将找到“apply”的所有匹配项(以及“appl”、 “applyy”和“applyyy”的所有匹配项),而不只是后面跟有星号的那些匹配项。
^输入或行的起始部分。^T 匹配“This good earth”中的“T”,但与“Uncle Tom’s Cabin”中的“T”不匹配$输入或行的结尾部分。h$ 匹配“teach”中的“h”,但与“teacher”中的“h”不匹配*0 个或多个前置字符。um* 匹配“rum”中的“um”、“yummy”中的“umm”和“huge”中的“u”+1 个或多个前置字符。um+ 匹配“rum”中的“um”和“yummy”中的“umm”,但在“huge”中没有任何匹配项?前置字符最多出现一次(即,指示前置字符是可选的)。st?on 匹配“Johnson”中的“son”和“Johnston”中的“ston”,但在“Appleton”或“tension”中没有任何匹配项.除换行符外的任何单字符。.an 匹配短语“bran muffins can be tasty”中的“ran”和“can”x|yx 或 y。FF0000|0000FF 匹配 bgcolor=”#FF0000” 中的“FF0000”和 font color=”#0000FF” 中的“0000FF”{n}恰好 n 个前置字符。o{2} 匹配“loom”中的“oo”和“mooooo”中前两个“o”,但在“money”中没有任何匹配项{n,m}至少 n 个、至多 m 个前置字符。F{2,4} 匹配“#FF0000”中的“FF”和“#FFFFFF”中的前四个“F”[abc]用括号括起来的字符中的任何一个字符。用连字符指定某一范围的字符(例如,[a-f] 等效于 [abcdef])。[e-g] 匹配“bed”中的“e”、“folly”中的“f”和“guard”中的“g”[^abc]未在括号中括起来的任何字符。用连字符指定某一范围的字符(例如,[^a-f] 等效于[^abcdef])。[^aeiou] 最初匹配“orange”中的“r”、“book”中的“b”和“eek!”中的“k”\b词边界(例如空格或回车符)。\bb 匹配“book”中的“b”,但在“goober”或“snob”中没有任何匹配项\B词边界之外的任何内容。\Bb 匹配“goober”中的“b”,但在“book”中没有任何匹配项\d任何数字字符。等效于 [0-9]。\d 匹配“C3PO”中的“3”和“apartment 2G”中的“2”\D任何非数字字符。等效于 [^0-9]。\D 匹配“900S”中的“S”和“Q45”中的“Q”\f换页符。?\n换行符。?\r回车符。?\s任何单个空白字符,包括空格、制表符、换页符或换行符。\sbook 匹配“blue book”中的“book”,但在“notebook”中没有任何匹配项\S任何单个非空白字符。\Sbook 匹配“notebook”中的“book”,但在“blue book”中没有任何匹配项\t制表符。?\w任何字母数字字符,包括下划线。等效于 [A-Za-z0-9_]。b\w* 匹配“the barking dog”中的“barking”和“the big black dog”中的“big”和“black”\W任何非字母数字字符。等效于 [^A-Za-z0-9_]。\W 匹配“Jake&Mattie”中的“&”和“100%”中的“%”Ctrl+Enter 或 Shift+Enter (Windows)、或者 Ctrl+Return 或 Shift+Return 或 Command+ Return (Macintosh)回车符。确保如果没有使用正则表达式,则在搜索时取消对“忽略空白差别”的选择。请注意,这匹配特定字符,而不是一般意义上的换行符;例如,它不匹配 <br> 标签或 <p> 标签。回车符在“设计”视图中显示为空格而不是换行符。?
使用括号在正则表达式内分隔出以后要引用的分组。然后在“替换”域中使用 $1、$2、$3 等来引用第一个、第二个、第三个和更后面的括号分组。