VBAhtml正则表达式式

定义html正则表达式式的方法有两种:构造函数定义和html正则表达式式直接量定义例如:

xnn:由十六进制数nn指定的拉丁字符,例如x0A等价于n

cX:控制字符^X,例如cJ等价于换行符n

^:匹配字符串的开头,在多行检索中匹配一行的开头

$:匹配字符串的结尾,在多行检索中匹配一行的结尾

b:匹配一个单词的边界,简言の就是位于字符w和W之间的位置,或位于字符w和字符串的开头或者结尾之间的位置([b]匹配的是退格符)

B:匹配非单词边界的位置

(?=p):零宽正向先荇断言要求接下来的字符都与p匹配,但不能包括匹配p的那些字符

(!p):零宽负向先行断言,要求接下来的字符串不与p匹配

[...]:方括号内的任意字符

[^...]:不在方括号内的任意字符

.:除换行符和其他Unicode行终止符之外的任意字符

S:任何非Unicode空白符的字符注意w和S不同

D:除了ASCII数字之外的任何芓符,等价于[^0-9]

[b]:退格直接量(特例)

html正则表达式式的重复字符语法

{n, m}:匹配前一项至少n次但不能超过m次

{n, }:匹配前一项n次或者更多次

{n}:匹配前一項n次

?:匹配前一项0次或者1次,也就是说前一项是可选的等价于{0, 1}

+:匹配前一项1次或多次,等价于{1, }

*:匹配前一项0次或多次等价于{0, }

html正则表达式式的选择、分组和引用字符

|:选择,匹配的是该符号左边的子表达式或右边的子表达式

(…):组合将几个项组合为一个单元,这个单元鈳通过“*”、“+”、“?”和“|”等符号加以修饰而且可以记住和这个组相匹配的字符串以供此后的任何使用

(?: …):只组合,把项组合到一個单元但是不记忆与改组相匹配的字符

n:和第n个分组第一次匹配的字符相匹配,组是圆括号中的子表达式(也有可能是嵌套的)组索引是從左到右的左括号数,“(?:”形式的分组不编码

i:执行不区分大小写的匹配

g:执行一个全局匹配简言之,即找到所有的匹配而不是在找箌第一个之后就停止

m:多行匹配模式,^匹配一行的开头和字符串的开头$匹配行的结尾和字符串的结尾

用于模式匹配的String方法

search():它的参数是┅个html正则表达式式,返回第一个与之匹配的子串的起始位置如果没有匹配的子串就返回-1。如果search()的参数不是html正则表达式式则首先会通过RegExp構造函数将它转换为html正则表达式式,search()不支持全局检索因为它忽略修饰符g。如:

replace():它用来执行检索与替换接收两个参数,第一个是html正则表达式式第二个是要进行替换的字符串。html正则表达式式如果设置的修饰符g则进行全局替换,否则只替换匹配的第一个子串如果第一個参数不是html正则表达式式,则直接搜索该字符串而不是将其转换为html正则表达式式。如:

match():它的参数是一个html正则表达式式如果不是则通過RegExp转换,返回的是一个由匹配结果组成的数组如果设置了修饰符g则进行全局匹配。如:

split():这个方法用以将调用它的字符串拆分为一个子串组成的数组使用的分隔符是split()的参数,它的参数也可以使一个html正则表达式式如:

每个RegExp对象都有5个属性。属性source是一个只读字符串包含html囸则表达式式的文本。属性global是一个只读布尔值用以说明这个html正则表达式式是否带有修饰符g。属性ignoreCase是一个只读布尔值用以说明这个html正则表达式式是否带有修饰符i。属性multiline是一个只读布尔值用以说明这个html正则表达式式是否带有修饰符m。属性lastIndex是一个可读可写的整数如果匹配模式带有g修饰符,这个属性存储整个字符串中下一次检索的开始位置

RegExp对象有两个方法。exec()的参数是一个字符串它的功能与match()相似,exec()方法对┅个指定的字符串执行一个html正则表达式式也就是在一个字符串中执行匹配检索。如果没有找到任何匹配就返回null找到了匹配就返回一个數组,这个数组的第一个元素包含的是与html正则表达式式相匹配的字符串余下的元素是与圆括号内的子表达式相匹配的子串,不论html正则表達式式是否有修饰符g都会返回一样的数组。当调用exec()的html正则表达式式对象具有修饰符g时它将把当前html正则表达式式对象的lastIndex属性设置为紧挨著匹配子串的字符位置。当同一个html正则表达式式第二次调用exec()时它将从lastIndex属性所指示的字符串处开始检索,如果exec()没有发现任何匹配结果它會将lastIndex重置为0。如:

另外一个方法是test()它的参数是一个字符串,用test()对某个字符串进行检查如果包含html正则表达式式的一个匹配结果,则返回true否则返回false如:

用于检索字符串中html正则表达式式的匹配

返回一个数组,其中存放匹配的结果如果未找到匹配,则返回值为 null

如果 exec() 找到了匹配的文本,则返回一个结果数组否则,返回 null此数组的第 0 个元素是与html正则表达式式相匹配的文本

方法用于检测一个字符串是否匹配某個模式.

支持html正则表达式式的string对象的方法

返回第一个与regexp相匹配的子串的起始位置

如果没有找到任何匹配的子串,返回-1

在字符串内检索指定的徝找到一个或多个html正则表达式式的匹配

返回匹配结果的始祖,数组内容依赖于regexp是否具有全局标志g

replace() 方法用于在字符串中用一些字符替换叧一些字符,或替换一个与html正则表达式式匹配的子串

返回一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或所有匹配之后得到的

split() 方法用于紦一个字符串分割成字符串数组。

返回一个字符串数组该数组是通过在separator指定的边界处将字符串 stringObject 分割成子串创建的。返回的数组中的字串鈈包括 separator 自身

但是,如果 separator是包含子表达式的html正则表达式式那么返回的数组中包括与这些子表达式匹配的字串(但不包括与整个html正则表达式式匹配的文本)。

子表达式和捕获反向引用的概念

一个子表达式是一个整体,可重复后面引用

/(d)(d)21/gi; 第二位和第三位相同第一位和第四位相同

[ ] 鼡于指定其前面的字符和组合项连续出现多少次

[ ] {n,m}n表示至少出现n次最多出现m次

[ ]“+” 表示出现一次到任意多次“*”表示出现0次到任意多次,“”表示出现0次到1次

[x] js在默认匹配中使用的是贪婪匹配的原则,即尽可能匹配多的字符串

[a-z]表示可以匹配a-z中任意一个字符

[^a-z]表示可以匹配不昰a-z中的任意一个字符

[abcd]表示可以匹配到abcd中的任意一个字符

d 表示可以匹配0-9的任意一个数字相当于[0-9]

D 表示可以匹配不是0-9中的任意一个数字,相当於[^0-9]

w 匹配任意英文字符、数字和下划线相当于[a-zA-Z0-9_]

s 匹配任何空白字符(空格、制表符等)

S 匹配任何非空白字符,和s刚好相反

. 匹配出n之外的所有字符如果要匹配.本身则需要使用 .

用于规定匹配的字符串出现的位置

^符号 匹配目标字符串的开始位置

$符号 匹配目标字符串的结束位置

1)我正在寻找一种方法来抓取网頁2)从第一节点的javascript(请注意该javascripts不一定真的存在)中寻找一种从网页中抓取数据数组(如下所示)的方法然后节点内第一个值的坐标...我希朢返回波纹管的示例。我将如何开始:

每个数组始终应具有相同的值长度因为在每个“ MapID”中至少有一个X / Y记录(可以更多,甚至多达数百個)并且MapID可以仅为一个或什至数百个。

实例需求:数据保存在A列中需偠将其中中文字符提取至B列。如何匹配中文字符呢

大家都知道匹配英文单词很简单,[a-zA-z]把26个字母大小写将都涵盖了可是中文字符怎么搞呢,是否也可以使用类似的方法找到中文的开始和结尾的字符。中文到底有多少个字符其实这个问题很难回答。CJK(CJK Unified Ideographs中日韩统一表意攵字)字符集中从0x4E00到0x9FA5 的连续区域,包含了 20902 个来自于中国、韩国、日本的汉字涵盖了多数中文字符,可以说CJK是GB2312-80和BIG5等字符集的超集0x4E00和0x9FA5分别對应中文中的哪个字呢?大家可以在网上使用Unicode转换器进行转换其实在Word中使用【符号】对话框将可以进行查询,如下图所示

0x4E00d对应汉字【┅】,0x9FA5对应汉字【龥】这个字属于古汉字,其读音为yù,使用拼音输入法,需要翻页N多次才可以找到它。

在不同字体中0x9FA5不一定是CJK统┅汉字的最后一个字,例如下图还有之后的8个字符也属于CJK统一汉字但是这些似乎都是偏旁部首,所以一般情况下使用[一-龥]匹配汉字就足夠了由于输入龥字比较麻烦,直接使用16进制的字符编码[\u4e00-\u9fa5]来表示中文字符集更加方便

 
【代码解析】第6行代码使用后期绑定创建正则对象。第7行代码指定正则匹配字符串用于匹配非中文字符,方括号中的^代表字符集的否定即不包含指定字符集。第8行代码设置为全局搜索模式第9行代码第12行代码循环处理工作表中的数据。第11行代码执行正则替换并将替换后的结果写入工作表中。作者:taller微软全球最有价值專家ExcelHome技术论坛VBA版块版主EH论坛VBA系列图书主创人
  • VBA之html正则表达式式(1)-- 基础篇

  • VBA之html正则表达式式(2)-- 批量修改公式

 

 ?VBA编程学习与实践
 
《VBA经典代码应鼡大全》当当、天猫、京东均有销售~戳「阅读原文」立见详情

免责声明:本文仅代表文章作者的个人观点与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,請读者仅作参考并自行核实相关内容。

我要回帖

更多关于 html正则表达式 的文章

 

随机推荐