VBScript脚本语言基础

VBScript脚本语言基础

2.1 vbs脚本语言简介

2.2 第一个vbs脚本语言–hello world

打开记事本程序,在编辑窗口填写,保存文件的扩展名为:.vbs

对话框:

  1. 输入框

    inputbox(“请输入第一 条边的边长”,“第一 条边”)

在这里插入图片描述
2. 输出框

​ msgbox("输入错误! ")

可能遇到错误:

1:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UiQqSPEW-1593481135912)(https://raw.githubusercontent.com/bakabakabeng/PicGoStore/master/img/image-20200621093617006-1592807313749.png)]

解决方法:把vbs另存为ANSI编码

2:调用过程函数时不能使用括号,即:inputbox “请输入第一条边的边长”,“第一条边”(因为此时没有赋值,直接使用该函数,此时该函数为过程函数)但如果该函数只有一个参数,直接使用过程函数时加括号也可以,如:msgbox(“Hello World!”);但这样就不行,如:msgbox(“Hello World!”,“hh”)

3:申明变量时,不能直接赋值,只能后赋值,如:dim a:a=msgbox(“Hello World!”,“标题”)

输出框—msgbox()函数:

msgbox语法:msgbox"对话框内容",,“对话框的标题”

参数:如果用第三个参数,第二个参数就不能省略

​ 第二个参数:数值表达式,是表示指定显示按钮的数目和类型、使用的图标样式,如果省略,则 buttons 的默认值为 0。

msgbox "Hello World!"
msgbox"Hello World!"
msgbox c
msgbox("Hello World!")
msgbox ("Hello World!")
以上几种表达方式都可以

输入框一inputbox()函数:

inputbox语法格式:

inputbox(“对话框内容”,“对话框标题”)

inputbox()函数的返回值是字符串。

变量:

  1. VBScript语言大小写不敏感

  2. 变量命名规则:

​ 第一个字符必须是字母。

​ 不能包含嵌入的句点。

​ 长度不能超过255个字符。

  1. 在VBScript中只有一个基本数据类型Variant

  2. 所有变量的数据类型都是Variant.

  3. 声明变量的一种方式是使用Dim

  4. 声明多个变量时,使用逗号分隔变量。

​ dim a,b,c

注释:

  • 所有单引号后面的内容都被解释为注释
  • Rem后面的内容都被解释为注释

冒号:分隔语句

VBScript中允许在一行代码内同时有几条语句,但是每条语句之间用冒号:分隔。

dim s,a,b
a=2:b=3
s=a+b
msgbox s

VBScript在定义时只有一-种变量类型,在实际使用中,有时系统会自动识别需要使用的类型,并将其自动转换成相应的变量类型。

2.3 算术运算

常量:

重复使用同一个值,可设为常量,声明为const

const pi=3.1415926

算术运算:

  1. 加+ 减- 乘* 除/ 商取整\ 模(取余数)mod

  2. 幂运算符:^ 5^2即5的平方

  3. 其他函数:

    int()取整数(不会四舍五入),sqr()开平方根,abs()绝对值,hex()转换为十六进制

    cot()转换为八进制

连接运算符:

& +

2.4 条件语句与逻辑运算

布尔类型:

dim a,b
a=true
b=false
ps:"true"是字符串,true是布尔值

逻辑运算符:

  1. 等于= 不等于<> 大于> 小于< 大于等于>= 小于等于<=
  2. 或or 与and 非not

if then条件语句:

定义:

if(条件) then
执行语句
end if
dim a
a=inputbox("请输入一个大于100的数")
a=int(a)
if a>100 then
    msgbox("正确")
end if
if a<100 then
    msgbox("错误")
end if

if then else条件语句:

定义:

if(条件) then
执行语句1
else
执行语句2
end if
if a>100 then
    msgbox("正确")
else
    msgbox("错误")
end if

条件语句结合逻辑运算:

if a>10 and b>20 then
.....
end if

多重条件语句:

定义:

if(条件1) then
执行语句1
else if(条件2) then
执行语句2
....
else
执行语句n
end if
end if
dim a
a=inputbox("请输入一个大于100 的数")
a=int(a)
if a>100 then .
msgbox("正确")
else if a=100 then
msgbox("老大,你耍我?") else
msgbox("错误")
end if
end if

易错点:

dim a,b,c,d
a=inputbox()
b=inputbox()
c=inputbox()
d=a*2+b*2    '此时d为数值类型,而c为字符型,所以一直c<>d
if c=d then
    msgbox "f"
else
    msgbox "d"
end if

select case多重条件语句:(不用加break)

dim a
a=inputbox("输入一个1-3的值")
a=int(a)
select case a
case 1
msgbox "壹"
case 2
msgbox "贰"
case 3
msgbox "叁"
case else
msgbox "输入错误" 
end select

其他:

  • 类型转换:

cbyte()转换成字节型、cint()转换成整型、clng()转换成长整型

cstr()转换成字符串

cdbl()转换成双精度浮点数、csng()转换成单精度浮点数

  • 时间相关函数:

date()、time()、 now()

带参数的year()、month()、 day()、 hour()、 second()

  • 字符串相关函数:

len()、ucase()、 lcase()、 replace()

instr()查找指定字符串,split()拆分字符串,mid()截取字符串

3.1 循环语句-do loop

定义:

do
执行语句
loop
dim sum
sum=0
do
    sum=sum+int(inputbox("请输入交易额"))
loop   '缺少循环终止条件,死循环,只能用ctrl+shift+esc启动任务管理器来结束该进程
msgbox sum
此时需要引入exit do,终止循环

ex:

密码验证–exit do:

dim a
const pass="123456"
do
    a=inputbox("请输入密码")
    if a=pass then
        msgbox("密码校验成功")
        exit do
    end if
loop      

密码安全验证(一)–do loop:

dim a,ctr
ctr=0
const pass="pass123_"
do
    if ctr=3 then
        msgbox("已经达到认证上限。")
        exit do
    else
            a=inputbox("请输入密码:")
            if a=pass then
                msgbox("认证成功,欢迎!!")
                exit do
            else
                    ctr=ctr+1
                    msgbox("认证出错,请检查密码。")
            end if
     end if
loop                            

密码安全验证(二)–do while loop

dim a,ctr
ctr=0
const pass="pass123_"
do while ctr<3
    a=inputbox("请输入密码:")
    if a=pass then
        msgbox("认证成功,欢迎!")
        exit do
    else
            ctr=ctr+1
            msgbox("认证出错,请检查密码。")
    end if
loop         

密码安全验证(二)–do loop while

dim a,ctr
ctr=0
const pass="pass123_"
do 
    a=inputbox("请输入密码:")
    if a=pass then
        msgbox("认证成功,欢迎!")
        exit do
    else
            ctr=ctr+1
            msgbox("认证出错,请检查密码。")
    end if
loop while ctr<3

3.2 循环语句-while wend

定义:

while(条件) '当条件为true时循环
执行语句
wend
dim countter
counter=0
while counter<5
    msgbox counter
    counter=counter+1
wend

密码安全验证–while wend

dim a,ctr
ctr=0
const pass="pass123_"
while ctr<3
    a=inputbox("请输入密码:")
    if a=pass then
        msgbox("认证成功,欢迎!")
        ctr=3
    else
            ctr=ctr+1
            msgbox("认证出错,请检查密码。")
    end if
wend

3.3 循环语句-for next

定义:

当使用循环逐一递增(或递减)时,可采用for next

for 循环变量=初值 to 终值 step 步长
循环体1
exit for '退出循环
循环体2
next
dim counter
counter=0
for counter=0 to 5 step 1 '不写的默认情况下step为1
    msgbox counter
next

密码安全验证–for next:

dim a,ctr
ctr=0
const pass="pass123_"
for ctr=0 to 2
    a=inputbox("请输入密码:")
    if a=pass then
        msgbox("认证成功,欢迎!")
        exit for
    else
        msgbox ctr   '一次循环结束后就加一
        msgbox("认证出错,请检查密码。")
    end if
next

3.4 一维数组

定义:

dim name(9) ps:下表从0开始,定义了10个数组元素

dim a(9)
for i=0 to 9
    a(i)=i
    msgbox(a(i))
next

array函数:

dim arr
arr=array("t1","t2","t3")
msgbox arr(0)
msgbox arr(1)
msgbox arr(2)

lbound函数和ubound函数:

lbound函数为取最小下标,ubound函数为取最大下标

dim arr
arr=array("t1","t2","t3")
for i=0 to ubound(arr)-lbound(arr)
    msgbox arr(i)
next

join函数:

将数组变为字符串

dim arr
arr=array("t1","t2","t3")
msgbox join(arr,",")

split函数:

将字符串变为数组

dim arr,str
str="t1,t2,t3"
arr=split(str,",")
msgbox arr(0)
msgbox arr(1)
msgbox arr(2)

ex:

一维数组—保存学生姓名:

dim name(5),str  '共6个学生,str存放所有学生的名字
for i=0 to 5
     name(i)=inputbox("请输入第"&i+1&"个学生的名字")
     str=str&" "&name(i)
next
msgbox str

三个一维数组—存放学生信息:

dim name(2),age(2),score(2),ctr,cname
for ctr=0 to 2
     name(ctr)=inputbox("请输入第"&ctr+1&"个学生的名字")
     age(ctr)=inputbox("请输入第"&ctr+1&"个学生的年龄")
     score(ctr)=inputbox("请输入第"&ctr+1&"个学生的成绩")
next
msgbox name(0)
msgbox age(1)
msgbox score(2)

查询指定学生的所有信息:

cname=inputbox("请输入你要查询的名字:")
for ctr=0 to 2
     if name(ctr)=cname then
           exit for
     end if
next
msgbox("姓名:"&name(ctr)&" "&"年龄:"&age(ctr)&" "&"成绩:"&score(ctr))

3.5 循环语句-for each next

定义:

for each 成员 in 数组或集合

​ 循环体

next

dim a(9),v
for i=0 to 9
    a(i)=i
next
法一:
for each v in a   
    msgbox v  
next
法二:
for i=0 to 9
    msgbox a(i)
next

乘法口诀–循环嵌套:

dim i,j,str
for i=1 to 9
    for j=1 to 9
        str=str&i*j&" "
    next
    str=str&vbCrlf  'vbCrlf代表回车和换行
    msgbox str
next

3.6 二维数组

定义:

dim a(3,2) ps:下标从0开始,定义了4*3=12个数组元素

dim a(3,2),i,j,str
for i=0 to 3
    for j=0 to 2
        a(i,j)="x"&j
    next
next
for i=0 to 3
    for j=0 to 2
        str=str&a(i,j)&" "
    next
    str=str&vbcrlf
    msgbox str
next

ex:

二维数组–存放学生信息:

dim student(3,2),i,j,ctr,cname,opt
for i=0 to 3
      for j=0 to 2
           select case j
                case 0
                     opt="name"
                case 1
                     opt="age"
                case 2
                     opt="score"
           end select
           student(i,j)=inputbox("请依次输入第"&i+1&"个学生的"&opt)
      next
next
cname=inputbox("请输入你要查询的名字:")
for ctr=0 to 3
      if student(ctr,0)=cname then
          exit for
      end if
next
msgbox("姓名:"&student(ctr,0)&" "&"年龄:"&student(ctr,1)&" "&"成绩:"&student(ctr,2))

ps: 使用select ······end select语句来更加清晰表示字段名

3.7 函数

定义的函数和过程位置没有限制,放在调用前或后都可以

定义:

function 函数名称(参数列表)

​ 函数代码

​ 函数名称=某值 ’用来返回值

end function

无参函数的定义:

function func()
  msgbox "hello world!"
end function

函数的调用:

call 函数名(参数列表)

call func

call func() '直接调用,必须用call语句调用

func ’原则上函数不能直接使用

func()

带参函数的定义:

dim name
function func(name)
    msgbox "hello "&name
end function

带参函数的调用:

call func("张三 ") ‘直接使用,必须用call语句调用

func “李四” ’原则上函数不能直接使用

func(“王五”)

自定义函数—两数求和:

function add(num1,num2)
    dim num
    num=num1+num2
    msgbox num
end function
call add(1,2)
add 1,2

ps:使用call时,一定要带 ()但无参时也可以不带()

​ 不使用call时,不要带(),但没有参数或只有一个参数时,可以带()

函数返回值:

function add(num1,num2)
    add=num1+numm2      ‘用来返回值
end function
msgbox add(1,2)

3.8 过程

不管是过程还是函数都称为过程

区别:过程没有返回值,不能放在表达式中

过程的定义:

sub 过程名称(参数列表)

​ 过程代码

end sub

无参过程的定义:

sub func()
    msgbox "hello world!"
end sub

过程的调用:

call 过程名(参数列表)

call func

call func()

func

func()

带参过程的定义:

dim name
sub func(name)
    msgbox "helllo "&name
end sub

带参过程的调用:

call func("张三 ")

func “李四”

func(“王五”)

自定义过程—两数求和:

sub add(num1,num2)
    dim num
    num=num1+num2
    msgbox num
end sub
call add(1,2)
add 1,2     ’此时不要带括号

ps:使用call时,一定要带 ()

​ 不使用call时,不要带(),但没有参数或只有一个参数时,可以带()

3.9 过程与函数

总结:

  1. 函数有返回值,过程无返回值

    过程:

sub total(x,y)
sum=x+y
msgbox “二数之和是”&sum
end sub
total 30,20


函数:

```vbscript
dim a,b
function exp()
 b=3
    exp=b+1
end function
msgbox exp()+1
  1. 函数可以放在表达式中,过程不可以

    msgbox exp*2+3 ‘也正确

    此时的exp()可以不写(),因为无参

  2. 函数返回值被接收时,不可使用call且一定要带()

    str =call exp() ‘语法错误

  3. 不使用call时,不要带(),没有参数或只有一个参数时,可以带()

  4. function只能出现在赋值语句的右边,或者表达式中,不能直接使用,如直接使用函数,则必须使用call语句调用,并取消返回值

3.10 vbs运行外部程序

CreateObject

  • VBS也提供了一些内部函数和对象,但是VBS没有提供任何命令来访问Windows系统内部的部件。

  • 它提供了一条极为方便、功能也相当强的命令-CreateObject。

  • CreateObject命令可以访问windows系统内安装的所有com对象,并且可以调用这些部件中存放的命令。

Windows脚本宿主的常用对象

●WSH(Windows Scripting Host)也就是用来解析VBS的宿主。WSH可以利用脚本来实现计算机工作的自动化;但也使得系统有了安全隐患。

●WSH包含了几个常用对象:

1、Scripting.FileSystemObject- -> 提供一整套文件系统操作函数

2、Scripting.Dictionary- -> 用来返回存放键值对的字典对象

3、Wscript.Shell- > 提供一 套读取系统信息的函数,如读写注册表、查找指定文件的路径、读取DOS环境变量,读取链接中的设置

4、Wscript.NetWork 一-> 提供网络连接和远程打印机管理的

函数。(其中, 所有Scripting对象都存放在SCRRUN.DLL文件中,所有的Wscript对象都存放在WSHOM.ocx文件中。)

CreateObject

Dim objShell
Set objShell = CreateObject("Wscript. Shell")
objShell.Run "notepad"

●Set是vbs指令,凡是将- -对象引用赋给变量,就需要使用set关键字。

●vbs的对象,其本身内置有函数和变量,其引用方法为在变量后加“.”,后紧跟其实现功能的函数。

●objshell.run的意思就是调用Wscript.shell中的运行外部程序的函数-——run。notepad 是记事本程序的文件名,也可以改成计算器文件名“calc",word 文件名winword

两个程序同时启动

Dim objShell
Set objShell = CreateObject("Wscript. Shell")
objShell.Run "notepad"
objShell.Run "calc"

两个程序顺序启动

Dim objShell
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "notepad", ,true
objShell.Run "calc"
'此时要等记事本关闭后,才打开计算器

run函数有三个参数:

  • 第一个参数是你要执行的程序的路径。
  • 第二个参数是窗口的形式。0是在后台运行; 1 表示正常运行;2表示激活程序并且显示为最小化; 3 表示激活程序并且显示为最大化。默认为1
  • 第三个参数是表示这个脚本是等待还是继续执行,如果设为了true,脚本就会等待调用的程序退出后再向后执行。默认为false
  • run函数有返回值,如果返回为0表示成功执行,如果不为0则这个返回值就是错误代码,可以通过这个代码找出相应的错误。

3.11 错误处理

On Error Resume Next

  • 这行语句可以告诉VBS在运行时跳过发生错误的语句,紧接着执行跟在它后面的语句。
  • 发生错误时,该语句将会把相关错误号,错误描述和相关源代码压入错误堆栈。
  • 虽然On Error Resume Next语句可以防止vbs脚本在发生错误时停止运行,但是它并不能真正处理错误。

err对象

  • vbscript 提供了一个对象err对象
  • 有二个方法:clear,raise
  • 5个属性:description,helpcontext,helpfile,number,source
  • err对象不用引用实例,可以直接使用

示例:

on error resume next
dim a,b,c
a=5
b=0
c=a/b
msgbox "hi!"
if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

wscript.echo与msgbox作用差不多

3.12 文件操作

vbs对文件的读写操作

1、打开文件

  • 使用opentextfile方法

    set fs =createobject("scripting.filesystemobject")
    set ts=fs.opentextfile(“d:\1.txt",1,true)
    
  • 注意这里需要填入文件的完整路径,后面一个参数为访问模式;也可不输入路径,则打开当前目录下文件

  • 1为forreading

  • 2为forwriting

  • 8为appending

  • 第三个参数指定如果指定文件不存在,是否创建。

2、读取文件

读取文件的方法有三个:

read(x)读取x个字符

readline读取一行

readall全部读取

例如:

set fs =createobject("scripting.filesystemobject")
set ts=fs.opentextfile(“d:\1.txt",1,true)
value=ts.read(20)
line=ts.readline
contents=ts.readall

textstream对象的atendofstream属性。当处于文件结尾的时候这个属性返回true.我们可以用循环检测又没有到达文件末尾。例如:

set fs =createobject("scripting.filesystemobject")
set t=fs.opentextfile("d:\3.txt",1,false)
do while t.atendofstream<>true
    str=str&t.read(1)
loop
msgbox str
t.close
  • skip(x) 跳过x个字符
  • skipline 跳过一行

3、写文件

可以用forwriting和forappending方式来写

写有3种方法:

  1. write(x) ,该方法输出不换行,需要使用chr(13)回车符,chr(10)换行符,vbcrlf回车换行(当chr(13)和chr(10)单独使用时分别为回车符,换行符;但如果不一起使用则都为回车换行符)
  2. writeline ,该方法自动换行(会自动空一行)
  3. writeblanklines(n) 写入n个空行

示例:

'写文件
data="hello, I like script programing"+vbcrlf
set fs =createobject("scripting.filesystemobject")
if (fs.fileexists("d:\4.txt")) then
    set f =fs.opentextfile("d:\4.txt",8)
    f.write data
    f.writeline data
    f.close
else
    set f=fs.opentextfile("d:\4.txt",8, true)
    f.writeblanklines 2
    f.write data
    f.close
end if
'读写操作
'写:
dim fs,f,t,str
set fs =createobject("scripting.filesystemobject")
set f=fs.createtextfile("d:\test.txt")
f.write("hello world!")
f.close
'读:
set t=fs.opentextfile("d:\test.txt",1,false)
do while t.atendofstream<>true
    str=str&t.read(1)
loop
t.close
msgbox str

3.13 shell操作

1、打开记事本

下面的 vbscript 代码用记事本打开当前运行脚本的副本。

set wshshell = wscript.createobject("wscript.shell")
wshshell.run "%windir%\notepad "

这里%windir%,或者%systemroot%代表的是路径C:\windows

2、执行CMD命令

下面的 vbscript 代码打开一个命令窗口,将路径改为 c:\,并执行 dir 命令。

dim oshell
set oshell = wscript.createobject ("wscript.shell")
oshell.run "cmd /k " 

模拟键盘输入:

3,基本键盘输入

dim wshshell
set wshshell = CreateObject("WScript.Shell")
wshshell.run"notepad"
wscript.Sleep 3000  '延时3秒
wshshell.SendKeys " {Enter}" '模拟输入回车
wshshell.SendKeys "hello"   '模拟输入hello

4,特殊键盘输入

对于需要与shift,ctrl,alt三个控制键组合的按键,sendkeys使用特殊字符来表示:

—shift +

—ctrl ^

—alt %

同时按下ctrl+E

—wshshell.sendkeys"^e"

按住ctrl键的同时按下e和c两个键

—wshshell.sendkeys"^(ec)"

同时按住ctrl和e键,然后松开ctrl键,单独按下c字母键

—wshshell.sendkeys"^ec"

5,特殊的控制按键

特殊的控制按键,只要大括号括住这些字符即可。

发送加号“+”:

—wshshell.sendkeys"{+}"

发送回车键:

—wshshell.sendkeys"{enter}"

发送向下的方向键:

—wshshell.sendkeys"{down}"

6,重复输入字母:

格式为:{按键 数字}

发送10个字母“x”

—wshshell.sendkeys"{x 10}"

正则表达式

4.1 正则表达式简介

正则表达式是什么

正则表达式最早是由数学家Stephen Kleene于1956年提出,现在的标准已经被ISO批准和被Open Group组织认定

正则表达式是使用单个字符串来描述匹配一系列符合某个句法规则的字符串。

正则表达式由一些普通字符和一些具有特殊含义的元字符组成。

正则表达式做什么

查找/替换

验证数据格式

验证数据有效性

数据分析

……

应用场景

•可快速过滤、替换某些特定的字符串

–搜索文本

–网络爬虫

–用户输入合法性验证

–批量文本处理

•搜索字符的3种方式:

–精确搜索、通配符搜索、正则表达式搜索

正则表达式怎么做

•正则表达式过程

一次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功,否则失败。

•学习正则表达式,原则上就是学习各种元字符。

•写正则表达式不难,但是可读性差。

4.2 正则表达式基础

元字符

•通配符

•限定符

•定位符

•表示范围和选择的元字符

•转义符

•非捕获元字符

……

通配符

字符描述
.匹配任意单个字符,匹配除换行符号外的任意字符
\d匹配任意数字
\w匹配可成词的字符,匹配字母、数字、下划线
\x匹配任意十六进制数字
\s匹配任意空白字符
•.

–匹配除” \n”之外的任何单个字符。要匹配包括” \n”在内的任何字符,使用”(.|\n)”。

•\d

–匹配一个数字字符。等价于[0-9]。

•\w

–匹配包括下划线的任何单词字符。等价于”[A-Za-z0-9_]”。

•\s

–匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

•\D

–匹配一个非数字字符。等价于[^0-9]。

•\W

–匹配任何非单词字符。等价于” [^A-Za-z0-9_]”。

•\S

–匹配任何非空白字符。等价于[^\f\n\r\t\v]。

限定符

字符描述
*匹配前面的子表达式零次或多次,等价于{0,}
+匹配前面的子表达式一次或多次,等价于{1,}
?匹配前面的子表达式零次或一次,等价于{0,1}
{n}匹配确定的 n 次(n非负整数)
{n,}至少匹配n 次(n非负整数)
{n,m}最少匹配 n 次且最多匹配 m 次(n,m非负整数且n<=m)

字符重复

•*

–zo*能匹配”z”以及”zoo”。*等价于{0,}。

•+

–“zo+”能匹配”zo”以及”zoo”,但不能匹配”z”。+等价于{1,}。

•?

–“do(es)?”可以匹配”does”或”does”中的”do”。?等价于{0,1}。

•{n}

–“o{2}”不能匹配”Bob”中的“o”,但是能匹配”food”中的两个o。

•{n,}

–“o{2,}”不能匹配”Bob”中的”o”,但能匹配”foooood”中的所有o。”o{1,}”等价于”o+”。”o{0,}”则等价于”o*”。

•{n,m}

–“o{1,3}”将匹配”fooooood”中的前三个o。”o{0,1}”等价于”o?” 。请注意在逗号和两个数之间不能有空格。

定位符

元字符描述
^匹配字符串的开始,或排除
$匹配字符串的结束
\b匹配字符串的边界,匹配单词的开始或结束
\B匹配字符串的非边界

•定位符不能使用限定符

字符转义

•\

•将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。

•“\n”匹配一个换行符

•\+表示匹配+

•\* 匹配*

•“\\”匹配“\”

•“\(”则匹配“ (”

www.zjei.net和www\.zjei\.net

范围、选择

元字符描述
.匹配任意单个字符
[]匹配中括号中的任何一个字符,若要不匹配中括号内的字符,则在[后面加上^表示排除
-指明范围
|

非打印字符

字符描述
\cx匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。
\f匹配一个换页符。等价于 \x0c 和 \cL
\n匹配一个换行符。等价于 \x0a 和 \cJ。
\r匹配一个回车符。等价于 \x0d 和 \cM。
\s匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\n\r\t\v]。
\S匹配任何非空白字符。等价于 1
\t匹配一个制表符。等价于 \x09 和 \cI。
\v匹配一个垂直制表符。等价于 \x0b 和 \cK。

如何构造正则表达式

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。正则表达式的组件可以是单个字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。

优先级

优先级(从上往下依次降低)元字符描述
1\转义符
2(), (?😃, (?=), []子表达式和限定条件
3*, +, ?, {n}, {n,}, {n,m}限定符
4^, $, \metacharacter位置和顺序
5|

示例

^[0-9]*[1-9][0-9]*$  //匹配正整数 
^((-\d+)|(0+))$  //匹配非正整数
^-?\d+$    //匹配整数 
^(-?\d+)(\.\d+)?$  //匹配浮点数
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
[\u4e00-\u9fa5]	//匹配中文字符
[a-zA-Z0-9_]+@[1-9a-z]+(\.[a-z]{2,5})+ //email
1[358][0-9]{9}或者1[358]\d{9}  //电话号码

字符类运算符的优先级

如下所示,按从最高到最低的顺序排列: 
1     字面值转义     \x 
2     分组 [...] 
3     范围 a-z 
4     并集 [a-e][i-u] 
5     交集 [a-z&&[aeiou]]

示例

[abc] a、b 或 c
[^abc] 任何字符,除了 a、b 或 c(否定) 
[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内 
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集) 
[a-z&&[def]] d、e 或 f(交集) 
[a-z&&[^bc]] a 到 z,除了 b 和 c:[ad-z](减去) 
[a-z&&[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)  

4.3 VBS正则表达式

RegExp对象

•在VBS中,使用RegExp对象来支持正则表达式的使用。

•RegExp对象提供了3个属性和3个方法:

•属性:Pattern、Global、IgnoreCase

•方法:Test、Replace、Execute

RegExp 对象的创建

•set re = new regexp

•Set regex = CreateObject(“VBScript.RegExp”)

RegExp 对象的属性

•Pattern:

•该属性用于描述正则表达式的匹配模式,如用“+”来匹配前面的表达式一次或多次,用“.”来匹配除换行符\n以外的任何单字符。

•Global:

•该属性用于设置搜索过程中是仅匹配第一个还是全部匹配,=True时为全部匹配,False时则仅匹配一个。

•IgnoreCase:

•该属性用于设置匹配字符串时是否区分大小写,=True时不区分,=False时区分大小写。

RegExp 对象的方法

•Test(string)

•该方法用于对指定的字符串string执行一个正则表达式的搜索,返回一个布尔值,表示是否找到匹配的模式。

•Replace(string1,string2)

•该方法用于string2替换在string1中执行正则表达式查找到的文本。返回值为替换后的字符串。

•Execute(string)

•该方法用于对指定的字符串string执行正则表达式的搜索,该方法返回一个matches的集合,其中包含了在制定的字符串中找到的每一个匹配项。

Dim re, str
Set re = New RegExp	
		'等价于CreateObject("VBScript.RegExp")
re.Pattern = "[23456789]"	'等价于"[2-9]"
str = "Spain received 3 millimeters of rain last week."
MsgBox re.Test(str)
MsgBox re.Replace(str, "many")
Dim re, str
Set re = New RegExp
re.Pattern = "\d"		'改成"\d+"看看有什么不同
str = "a b c d e f 1 g 2 h ... 10 z"
MsgBox re.Test(str)
MsgBox re.Replace(str, "number")

Matches 对象

•Matches 对象是一个集合,它包含若干独立的 Match 对象。

•只能使用 RegExp对象的 Execute 方法来创建。

•Matches对象提供了2个属性:

属性:Count、Item

Matches 对象的属性

•Count:

该属性用于描述匹配对象的总数。

•Item(i):

该属性用于返回Matches对象中第i+1个的Match对象。

Dim re, s, mtchs
Set re = New RegExp
re.Global = True
re.Pattern = "\w+"
s = "苹果:iphone_5s;诺基亚:Nokia_1020"

Set mtchs = re.Execute(s)

msgbox mtchs.count
For i=0 to mtchs.count-1
    msgbox mtchs.item(i)
Next

Match 对象

•在执行正则表达式时,可能产生零个或多个 Match 对象。

•每个 Match 对象都提供了与正则表达式匹配的字符串的访问入口、字符串的长度,以及标识匹配位置的索引。

•Match对象提供了3个属性:

属性:FirstIndex 、 Length 、 Value

Match 对象的属性

•FirstIndex :

返回在搜索字符串中匹配的位置。使用从零起算的偏移量,该偏移量是相对于搜索字符串的起始位置而言的。

•Length:

返回在字符串搜索中找到的匹配的长度。

•Value:

该属性用于返回在一个搜索字符串中找到的匹配的值或文本。

Dim re, s, mtch
Set re = New RegExp
re.Global = True
re.Pattern = "\w+"
s = "苹果:iphone_5s;诺基亚:Nokia_1020"

Set colMatches = re.Execute(s)

msgbox colMatches.count
For each mtch in colMatches
    msgbox mtch.value
    msgbox mtch.firstindex
    msgbox mtch.length
Next

4.4 正则表达式高级应用

贪婪与非贪婪匹配(1)

•贪婪与非贪婪首先都要尽可能匹配

•贪婪:尽可能多的匹配

字符串表达式匹配结果说明
abcabca(a)(\w+)abcabca其中的(\w+)会匹配a后的所有字符,即bcabca
abcabca(a)(\w+)(a)abcabca其中的(\w+)虽然也能匹配第一个a后的所有字符,但为了让后面的(a)匹配, (\w+)将匹配第一个a和最后一个a之间的所有字符,即bcabc,而让出最后一个a
Dim re, str, mtch
Set re = New RegExp
re.Global = True
re.Pattern = "(a)(\w+)"	'试试(a)(\w+)(a)
str = "abcabca"		'试试abcabcabc

Set colMatches = re.Execute(str)

msgbox colMatches.count
For each mtch in colMatches
    msgbox mtch.value
Next

贪婪与非贪婪匹配(2)

•非贪婪:尽可能少的匹配

在限定匹配次数的元字符后加上一个”?”

字符串表达式匹配结果说明
abcabca(a)(\w+?)ab其中的(\w+?)只会匹配a后的b
abcabca(a)(\w+?)(a)abca为了让后面的(a)匹配,其中的(\w+) 将匹配第一个a后面的bc
Dim re, str, mtch
Set re = New RegExp
re.Global = True
re.Pattern = "(a)(\w+?)"	'试试(a)(\w+?)(a)
str = "abcabca"			'试试abaabaa

Set colMatches = re.Execute(str)

msgbox colMatches.count
For each mtch in colMatches
    msgbox mtch.value
Next

反向引用

•表达式中小括号 () 中包含的子表达式的匹配结果会被记录下来

•利用\n可以引用前面第n个子表达式的匹配结果

•子表达式的序号n以表达式中左括号” (” 的顺序排列

•\1,表示匹配下一个值与第一个子表达式相同的字符

字符串              表达式            匹配结果
aaa,#bbb#        ([ab])(\1)       第一次匹配aa
                                  第二次匹配bb

*hello*,#world#  (\*|#)(.*?)(\1)  第一次匹配*hello*
                                  第二次匹配#world#
Dim re, str, mtch
Set re = New RegExp
re.Global = True
re.Pattern = "([ab])(\1)"	
str = "aaa,#bbb#"		'试试aba,#bab#

Set colMatches = re.Execute(str)

msgbox colMatches.count
For each mtch in colMatches
    msgbox mtch.value
Next
Dim re, str, mtch
Set re = New RegExp
re.Global = True
re.Pattern = "(\*|#)(.*?)(\1)"	'试试去掉?,设成贪婪匹配
str = "*hello*,#world#"		'试试*hello*,#world*

Set colMatches = re.Execute(str)

msgbox colMatches.count
For each mtch in colMatches
    msgbox mtch.value
Next

非捕获元字符

字符描述
(?😃不缓存所在的子表达式
(?=)匹配的右侧必须满足?=后的模式
(?!)匹配的右侧必须不满足?=后的模式
(?<=)匹配的左侧必须满足?<=后的模式
(?<!)匹配的左侧必须不满足?<=后的模式

预搜索

•预搜索不作匹配,是一种限定条件

•(?:pattern)

–匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“ (|)”来组合一个模式的各个部分是很有用。

–例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。

正向预搜索

•(?=pattern)

–正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

•**(?!**pattern)

–正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“ Windows(?!95|98|NT|2000)”能匹配“ Windows3.1”中的“ Windows”,但不能匹配“ Windows2000”中的“ Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

•正向预搜索:

–(?=xxx) 右侧必须匹配xxx对应的表达式

–(?!xxx) 右侧必须不匹配xxx对应的表达式

字符串表达式结果
windows98 windowsNT windows2000Windows(?=NT|XP)windows NT中的windows
Dim re, str, mtch
Set re = New RegExp
re.Global = True
re.IgnoreCase = True
re.Pattern = "Windows(?=NT|XP)"	'改成Windows(?!NT|XP)
str = "windows98; windowsNT; windows2000"

Set colMatches = re.Execute(str)

msgbox colMatches.count
For each mtch in colMatches
    msgbox mtch.value
Next

反向预搜索

•**(?<=**pattern)

–反向肯定预查,与正向肯定预查类拟,只是方向相反。例如, “ (?<=95|98|NT|2000)Windows”能匹配“ 2000Windows”中的“ Windows”,但不能匹配“ 3.1Windows”中的“ Windows”。

•(?pattern)

–反向否定预查,与正向否定预查类拟,只是方向相反。例如

“(?<!95|98|NT|2000)Windows”能匹配

“ 3.1Windows”中的“ Windows”,但不能匹配

“ 2000Windows”中的“ Windows”。

•反向预搜索:

–(?<=xxxxx) 左侧侧必须匹配xxx对应的表达式

–(?<!xxxxx) 左侧必须不匹配xxx对应的表达式

•例:

–\b\w+(?=ing\b)

•The beginning of words ending with ‘ing’

–(?<=\bre)\w+\b

•The end of words starting with ‘re’

•匹配以re开头的单词的后半部分(除了re以外的部分),例如在查找reading a book时,它匹配ading。

Dim re, str, mtch
Set re = New RegExp
re.Global = True
re.IgnoreCase = True
re.Pattern = "\b\w+(?=ing\b)"		
str = "The beginning of words ending with 'ing'."

Set colMatches = re.Execute(str)

msgbox colMatches.count
For each mtch in colMatches
    msgbox mtch.value
Next

课后习题

1、写一段程序输出你的专业,要求输入框inputbox()带有两个参数,输出框msgbox()带三个参数。

dim a
a=inputbox("输入专业名","专业")
msgbox a,0,"专业为:"

2、写一段程序进行3次输入,分别输入你的学号、姓名、班级,并分3次输出。

dim a,b,c
a=inputbox("学号:")
msgbox a
b=inputbox("姓名:")
msgbox b
c=inputbox("班级:")
msgbox c

3、编一个程序取得20 / 3 的余数。

dim a
a=20 mod 3
msgbox a,,"a的余数为:"

4、制作一个求长方体体积小程序,分别弹出三个输入框,分别输入长、宽、高,弹出对话框显示出体积。

dim a,b,c,v
a=int(inputbox("长:"))
b=int(inputbox("宽:"))
c=int(inputbox("高:"))
v=a*b*c
msgbox v,0,"体积为:"

5、给定一个数,大于10而且小于20输出“正确”,否则输出“错误” 。

dim a
a=inputbox("输入一个数:")
if a>10 and a<20 then
     msgbox "正确"
else
     msgbox "错误"
end if

6、输入12或者15,输出“正确”,否则输出“错误”。

dim a
a=inputbox("输入一个数字:")
a=int(a)
if a=12 or a=15 then
      msgbox "正确"
else
      msgbox "错误"
end  if

7、编一个程序, 计算圆形的面积, 半径由用户给出 (使用Inputbox), PI取值3.14159 。

dim r,s
const pi=3.14159
r=inputbox("r=")
s=pi*r^2
msgbox(s)

1、输出从1到100之间所有不能被3整除的数

dim i,s
for i=1 to 100
      if i mod 3<>0 then
      s=s&i&" "
      end if
next
msgbox s

2、找出1-99之间是7的倍数或者个位数字是7或者十位数字是7的数字, 并输出这些数字,统计有多少个

dim i,s,m
m=0
for i=1 to 99
      if i mod 7=0 or i mod 10=7 or i \10=7 then
      s=s&i&" "
      m=m+1
      end if
next
msgbox s,,"这些数字为:"
msgbox m,,"个数为:"

3、一个数如果恰好等于它的因子之和,这个数就称为“完数”。(因子:除去这个数本身正的约数),例如6=1+2+3。编程 找出1000以内的所有完数。

dim i,j,s,m
for i=2 to 999
     s=0
     for j=1 to i-1
         if i mod j=0 then
            s=s+j
         end if
     next
  if i=s then
     m=m&i&" "
  end if
next
msgbox m,,"1000以内所有的完数为:"
      

4、水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)

提示:

153 个位数为3 十位数为5 百位数为1

236 个位数为6 十位数为3 百位数为2

dim a,i,j,k,s
for a=100 to 999
    i=a\100
    j=(a mod 100)\10
    k=a mod 10
    if i^3+j^3+k^3=a then
       s=s&a&" "
   end if
next
msgbox s,,"100到999之间所有的水仙花数为:" 

5、在我国的数学经典著作“九章算术”中有这样一道题:百钱买百鸡, 公鸡5钱一只, 母鸡3钱一只, 小鸡1钱3只)求得是能有多少种办法买这些鸡. 如果看不懂的话我用大白话说说:有人要去买鸡, 用100块钱正好买了100只鸡, 价格如下:公:5 , 母 : 3 , 母:3 ,:3, 小:1$ 3只, 让你求一共多少种卖法(公母小怎么搭配). 请用循环解决这个问题.

提示:

设公鸡数量为a,则a的范围为?

设母鸡数量为b,则b的范围为?

dim gj,mj,xj,s
for gj=0 to 100
  for mj=0 to 100
      for xj=0 to 100
       if(gj+mj+xj=100 and 5*gj+3*mj+xj/3=100) then
          s=s&"公鸡:"&gj&"    母鸡:"&mj&"    小鸡:"&xj&vbCrlf
        end if
      next
   next   
next
msgbox s,,"所有的组合:"

1.定义一个数组, 包含5个元素,都是随机整数(随便输入), 要求把他们按照从大到小的排序并输出。

dim a(4),m,s,t
for m=0 to 4
      s= inputbox ("请依次输入5个数,第"&(m+1)&"个:")
      a(m)=int(s)
next
for i=0 to 3
    for j=0 to 3-i
      if a(j+1)>a(j) then
              t=a(j)
          a(j)=a(j+1)
            a(j+1)=t
      end if
    next
next
msgbox join(a,",")

2.现有字符串“10\12\34\23\45\35\45”,根据字符“\”分割字符,计算各字符的总和。

dim s,a,i,sum
sum=0
s="10\12\34\23\45\35\45"
a=split(s,"\")
for i=lbound(a) to ubound(a)
         sum=sum+a(i)
next
msgbox sum,," 各字符总和为:"

3.读入10个数,输出偶数项及它们的和,输出奇数项及它们的平均数。

dim m,s,a(9),s1,s2,i,j,sum1,sum2,avr
sum1=0
sum2=0
j=0
for m=0 to 9
      s= inputbox ("请依次输入10个数,第"&(m+1)&"个:")
      a(m)=int(s)
next
for i=0 to 9
      if a(i) mod 2=0 then
          s1=s1&a(i)&" "
          sum1=sum1+a(i)
      else
          s2=s2&a(i)&" "
          sum2=sum2+a(i)
          j=j+1
      end if
next
msgbox s1,,"偶数项为:"
msgbox sum1,,"偶数项和为:"
msgbox s2,,"奇数项为:"
msgbox sum2/j,,"奇数项平均数为:"

4.定义一个数组,读入10个数,请使用for each next输出它们的和及平均值。

dim v,m,s,a(9),sum,avr
sum=0
for m=0 to 9
      s= inputbox ("请依次输入10个数,第"&(m+1)&"个:")
      a(m)=int(s)
next
for each v in a
      sum=sum+v
next
avr=sum/10
msgbox sum&","&avr,,"他们的和与平均值分别为:"

5.有两个二维数组a(4,4)和b(4,4) (元素值随便), 交换两个数组(原来的a的所有元素值变成b的, b的所有元素值变成a的)。

dim a(4,4),b(4,4),i,j,s1,s2
for m=0 to 4
     for n=0 to 4
           a(m,n)="a"&m&"-"&n
     next
next
for m=0 to 4
     for n=0 to 4
           b(m,n)="b"&m&"-"&n
     next
next

rem  转换:
for i=0 to 4
    for j=0 to 4
         t=a(i,j)
         a(i,j)=b(i,j)
         b(i,j)=t
    next
next

rem 输出:
for v1=0 to 4
    for v2=0 to 4
      str1=str1&a(v1,v2)&" "
    next
      str1=str1&vbcrlf
next
for v1=0 to 4
    for v2=0 to 4
      str2=str2&b(v1,v2)&" "
    next
      str2=str2&vbcrlf
next
msgbox str1,,"a转换后为:"
msgbox str2,,"b转换后为:"

1.采用函数,用户输入两个数, 输出最大值和最小值。

dim a,b
a=inputbox ("请输入2个数字:第一个")
b=inputbox ("请输入2个数字:第二个") 
function hh(a,b)
      if a>b then
           hh="最大值为:"&a&","&"最小值为:"&b
      else if a<>b then
           hh="最大值为:"&b&","&"最小值为:"&a
      else
            hh="两个数相等,无最大最小值"
      end if
      end if
end function
msgbox hh(a,b)

2.采用函数,用户输入圆的半径, 输出圆的面积。

dim r
r=inputbox("请输入圆的半径:")
const pi=3.14
function s(r)
     s="该圆的面积为: "&pi*r^2
end function
msgbox s(r)

3.采用过程,用户输入两个数, 输出最大值和最小值。

dim a,b
a=inputbox ("请输入2个数字:第一个")
b=inputbox ("请输入2个数字:第二个") 
sub hh(a,b)
      if a>b then
           msgbox "最大值为:"&a&","&"最小值为:"&b
      else if a<>b then
            msgbox "最大值为:"&b&","&"最小值为:"&a
      else
            msgbox "两个数相等,无最大最小值"
      end if
      end if
end sub
call hh(a,b)

4.采用过程,用户输入圆的半径, 输出圆的面积。

dim r
const pi=3.1
r=inputbox("请输入圆的半径:")
sub s(r)
      msgbox "该圆的面积为: "&pi*r^2
end sub
call s(r)

5.利用函数或者过程,判断用户输入的字符串长度是否大于10。

dim s
s=inputbox("请输入一串任何字符:")
sub str(s)
      if len(s)>10 then
            msgbox "字符串长度大于10"
      else
            msgbox "字符串长度小于10"
      end if
end sub
call str(s)

6.利用函数或者过程,统计用户输入字符串中数字的个数。

dim s
s=inputbox("请输入一串任何字符:")
sub str(s)
      dim n,m,i
      i=0
      for n=1 to len(s)
             m=mid(s,n,1)                         '从字符串中返回指定数目的字符,mid()函数
             if asc(m)>=48 and asc(m)<=57 then    '返回与字符串的第一个字母对应的ANSI字符代码,asc()函数
                    i=i+1
              end if
      next
      msgbox "数字个数为:"&i
end sub
call str(s)

1.同时打开打开CMD命令,记事本

on error resume next

dim a
set a=createobject("wscript.shell")
a.run"cmd"
a.run"notepad"

if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

2.先记事本,关闭之后再打开计算器

on error resume next

dim a
set a=createobject("wscript.shell")
a.run"notepad",,true
a.run"calc"

if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

3.打开Chrome浏览器

on error resume next

dim a
set a=createobject("wscript.shell")
a.run"chrome.exe"

if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

4.利用VBS,创建文本文档D:/1.txt,里面内容如下:

北京,

on error resume next
dim fs,t
set fs=createobject("scripting.filesystemobject")
set t=fs.createtextfile("d:/1.txt")
t.write("北京")
t.close
set t=nothing
if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

5.利用VBS,弹出输入框,在里面可输入姓名,创建文本文档D:/2.txt,里面内容如下:

欢迎(输入框里的姓名)!

on error resume next

dim fs,t,h
set fs=createobject("scripting.filesystemobject")
set t=fs.createtextfile("d:/2.txt")
h=inputbox("请输入姓名:")
t.write("欢迎"&h&"!")
t.close
set t=nothing

if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

6.利用VBS,将前面两道题的文本文档里面的内容合并如下:

北京,欢迎(输入框的姓名)!

on error resume next

dim fs,t1,t2,str1,str2
set fs=createobject("scripting.filesystemobject")
set t1=fs.opentextfile("d:\1.txt",1)
set t2=fs.opentextfile("d:\2.txt",1)
str1=t1.readall
str2=t2.readall
msgbox(str1&","&str2)
t1.close
t2.close
set t1=nothing
set t2=nothing

if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

7.打开记事本,模拟键盘输入下面两行:

This is the most wonderful day of my life

because I´m here with you now

on error resume next

dim a
set a=createobject("wscript.shell")
a.run"notepad"
wscript.sleep 3000
a.sendkeys"^ "
a.sendkeys"This is most wonderful day fo my life"
a.sendkeys"{enter}"
a.sendkeys"because I'm here with you now"

if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

8.使用VBS打开“CMD”命令,在C盘创建以你姓名拼音命名文件夹(md d:\zhagnsan)

on error resume next

dim a
set a=createobject("wscript.shell")
a.run"cmd"
wscript.sleep 3000
a.sendkeys"md d:\yanli"
a.sendkeys"{enter}"

if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

9.使用VBS打开记事本,在里面模拟输入你的相关信息,模板如下:

姓名:张三

学号:XXXX

当前日期:date()

当前时间:time()

on error resume next

dim a
set a=createobject("wscript.shell")
a.run"notepad"
wscript.sleep 1000
a.sendkeys"^ "
a.sendkeys"name:bakabaka"
a.sendkeys"{enter}"
a.sendkeys"number:20200630"
a.sendkeys"{enter}"
a.sendkeys"date:"
a.sendkeys(date())
a.sendkeys"{enter}"bakabaka
a.sendkeys"time:"
a.sendkeys(time())
if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if


10.打开Chrome浏览器,输入http://www.baidu.com,

进入百度网站,搜索“VBScript”关键字

on error resume next

dim a
set a=createobject("wscript.shell")
a.run"""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"""
wscript.sleep 10000
a.sendkeys"^ "
a.sendkeys"http://www.baidu.com"
wscript.sleep 3000
a.sendkeys"{enter}"
wscript.sleep 3000
a.sendkeys"VBScript"
wscript.sleep 3000
a.sendkeys"{enter}"

if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

1、使用VBS正则表达式,在下面字符串中,搜索并显示每一个手机号码:

“NO1002028;妍静emor5;24;女;浙江;公务员;13507593654;NO1002024;之慕nlov5;40;女;四川;工人;13411652253;NO1002071;童书ores;27;女;天津;医务人员;13306512368”

dim str,matchs,reg
str="NO1002028;妍静emor5;24;女;浙江;公务员;13507593654;NO1002024;之慕nlov5;40;女;四川;工人;13411652253;NO1002071;童书ores;27;女;天津;医务人员;13306512368"
set reg=new regexp
reg.pattern="1[358][0-9]{9}"
reg.global=true
set matchs=reg.execute(str)
for i=0 to matchs.count-1
      msgbox matchs.item(i)
next

2、使用VBS正则表达式,在下面字符串中,搜索并替换每一个人的年龄为“age”:

“NO1002028;妍静emor5;24;女;浙江;公务员;13507593654;NO1002024;之慕nlov5;40;女;四川;工人;13411652253;NO1002071;童书ores;27;女;天津;医务人员;13306512368”

dim str,matchs,reg
str="NO1002028;妍静emor5;24;女;浙江;公务员;13507593654;NO1002024;之慕nlov5;40;女;四川;工人;13411652253;NO1002071;童书ores;27;女;天津;医务人员;13306512368"
set reg=new regexp
reg.pattern="[0-9][0-9](?=;[\u4e00-\u9fa5];)"
reg.global=true
msgbox reg.replace(str,"age")

3、使用VBS正则表达式,验证用户输入的用户名是否满足“可以包含数字、字母、下划线,且第一个字符为字母,长度为6-20位”的格式要求。

dim str,matchs,reg
str=inputbox("请输入用户名:")
set reg=new regexp
reg.pattern="^[A-Za-z][\da-zA-Z_]{5,19}$"
msgbox reg.test(str)

4、使用VBS正则表达式,验证用户输入的密码是否满足“必须包含大写,小写和数字,和特殊字符(!,@,#,%,&),且大于6位”的格式要求。

dim str,matchs,reg
str=inputbox("请输入密码:")
set reg=new regexp
reg.pattern="^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#%&])).{6,12}$"
msgbox reg.test(str)

5、使用VBS正则表达式,验证用户输入的身份证号码是否符合规范。

dim str,matchs,reg
str=inputbox("请输入身份证号码:")
set reg=new regexp
reg.pattern="^[1-9][0-9]{14})|([1-9][0-9]{16}[0-9xX]$"
msgbox reg.test(str)

6、使用VBS正则表达式,验证用户输入的邮箱格式是否符合规范。

dim str,matchs,reg
str=inputbox("请输入邮箱:")
set reg=new regexp
reg.pattern="^[a-zA-Z0-9_]+@[1-9a-z]+(\.[a-z]{2,5})+$"
msgbox reg.test(str)

wscript.echo err.number&"–"&err.description&"–"&err.source
end if


10.打开Chrome浏览器,输入http://www.baidu.com,

进入百度网站,搜索“VBScript”关键字

```vbscript
on error resume next

dim a
set a=createobject("wscript.shell")
a.run"""C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"""
wscript.sleep 10000
a.sendkeys"^ "
a.sendkeys"http://www.baidu.com"
wscript.sleep 3000
a.sendkeys"{enter}"
wscript.sleep 3000
a.sendkeys"VBScript"
wscript.sleep 3000
a.sendkeys"{enter}"

if err.number<>0 then
         wscript.echo err.number&"--"&err.description&"--"&err.source
end if

1、使用VBS正则表达式,在下面字符串中,搜索并显示每一个手机号码:

“NO1002028;妍静emor5;24;女;浙江;公务员;13507593654;NO1002024;之慕nlov5;40;女;四川;工人;13411652253;NO1002071;童书ores;27;女;天津;医务人员;13306512368”

dim str,matchs,reg
str="NO1002028;妍静emor5;24;女;浙江;公务员;13507593654;NO1002024;之慕nlov5;40;女;四川;工人;13411652253;NO1002071;童书ores;27;女;天津;医务人员;13306512368"
set reg=new regexp
reg.pattern="1[358][0-9]{9}"
reg.global=true
set matchs=reg.execute(str)
for i=0 to matchs.count-1
      msgbox matchs.item(i)
next

2、使用VBS正则表达式,在下面字符串中,搜索并替换每一个人的年龄为“age”:

“NO1002028;妍静emor5;24;女;浙江;公务员;13507593654;NO1002024;之慕nlov5;40;女;四川;工人;13411652253;NO1002071;童书ores;27;女;天津;医务人员;13306512368”

dim str,matchs,reg
str="NO1002028;妍静emor5;24;女;浙江;公务员;13507593654;NO1002024;之慕nlov5;40;女;四川;工人;13411652253;NO1002071;童书ores;27;女;天津;医务人员;13306512368"
set reg=new regexp
reg.pattern="[0-9][0-9](?=;[\u4e00-\u9fa5];)"
reg.global=true
msgbox reg.replace(str,"age")

3、使用VBS正则表达式,验证用户输入的用户名是否满足“可以包含数字、字母、下划线,且第一个字符为字母,长度为6-20位”的格式要求。

dim str,matchs,reg
str=inputbox("请输入用户名:")
set reg=new regexp
reg.pattern="^[A-Za-z][\da-zA-Z_]{5,19}$"
msgbox reg.test(str)

4、使用VBS正则表达式,验证用户输入的密码是否满足“必须包含大写,小写和数字,和特殊字符(!,@,#,%,&),且大于6位”的格式要求。

dim str,matchs,reg
str=inputbox("请输入密码:")
set reg=new regexp
reg.pattern="^(?:(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#%&])).{6,12}$"
msgbox reg.test(str)

5、使用VBS正则表达式,验证用户输入的身份证号码是否符合规范。

dim str,matchs,reg
str=inputbox("请输入身份证号码:")
set reg=new regexp
reg.pattern="^[1-9][0-9]{14})|([1-9][0-9]{16}[0-9xX]$"
msgbox reg.test(str)

6、使用VBS正则表达式,验证用户输入的邮箱格式是否符合规范。

dim str,matchs,reg
str=inputbox("请输入邮箱:")
set reg=new regexp
reg.pattern="^[a-zA-Z0-9_]+@[1-9a-z]+(\.[a-z]{2,5})+$"
msgbox reg.test(str)

  1. ↩︎
  • 5
    点赞
  • 20
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

乱码??

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值