前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >加强版正则表达式,邮箱,手机号防呆好用得不得了

加强版正则表达式,邮箱,手机号防呆好用得不得了

作者头像
加菲猫的VFP
发布2022-05-26 09:21:14
9590
发布2022-05-26 09:21:14
举报
文章被收录于专栏:加菲猫的VFP

正则表达式是什么?

简单的说就是,用一小段简单的各种字符的组合,即叫做 正则表达式,去实现复杂的: 字符串匹配,查找你到你所需要的内容,以便后期提取出来你所要的内容。

这个听起来很简单,但是很多现实的应用中,所要处理的字符串有千千万万种,各种复杂的字符,而且每个人的需求有无穷尽种,需要提取出的内容也是无穷多。而如果手动处理,写普通的if else语句去一点点判断字符串是否相等,则是无法实现的。

而用正则,就可以实现如此多的,繁杂的,极度复杂的,各种需求。

首先来两段代码。

代码语言:javascript
复制
* 判断邮箱名称是否有效
cPattern="^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$"
Regex = Createobject("NewXing.RegExp")
?Regex.Test("abc@abc.com",cPattern)

*--判断手机号输入是否有效
cPattern="^1(3[0-9]|5[0-3,5-9]|7[1-3,5-8]|8[0-9])\d{8}$"
Regex = Createobject("NewXing.RegExp")
?Regex.Test("18910011001",cPattern)

本组件用的是DEELX 正则引擎封装的com组件。所以VFP可用,其它语言也都可以用。

特点: 1、完全兼容VBScript.RegExp 正则组件的各种属性与方法 2、支持与 Perl 兼容的正则表达式语法。 3、支持 Ignorecase, Singleline, Multiline… 等常见匹配模式。 4、支持命名分组,条件表达式,递归表达式,零宽断言…等多种高级特性。

一、NewXing.RegExp 对象

属性

描述

Global

是否全局匹配,默认值False,即只会匹配一次,如要匹配所有需将它的值设置为True

IgnoreCase

匹配时是否忽略大小写,默认是区分大小的。值:(True/False)

Pattern

用于设置正则表达式。值:字符串

Multiline

多行模式。使 ^ 符号除了能够匹配字符串开始位置外,还能匹配换行符(\n)之后的位置;使 $ 符号除了能够匹配字符串结束位置外,还能匹配换行符之前的位置。默认情况下, ^ 符号只能匹配字符串开始位置, $ 符号只能匹配字符串结束位置。SINGLELINE 和 MULTILINE 虽然听起来相互矛盾,但却是作用在不同的地方。因此它们是可以组合使用的。在指定了 MULTILINE 之后,如果需要仅匹配字符串开始和结束位置,可以使用 \A 和 \Z。

Singleline *

单行模式。使小数点 "." 可以匹配包含换行符(\n)在内的任意字符。默认情况下,小数点只匹配换行符以外的任意字符,不匹配换行符。

RightToLeft *

从右向左的进行匹配。从被匹配字符串的结束位置向前进行查找匹配,同时,在表达式中也是右侧的表达式先进行匹配。

Extended *

忽略表达式中的空白字符,并且把从 # 开始到该行行末的内容视为注释。默认情况下,正则表达式中的空格,换行等字符将可以匹配相应的字符。指定了 EXTENDED 模式后,如果要在正则表达式中表示空白字符比如空格符号(space)时,应该用 \x20 表示,如果要在表达式中表示 # 符号,应该用 \# 表示。不管是否指定了 EXTENDED 模式,括号内以 ?# 号开始时,比如(?# xxx ),那么这一对括号以及包含的内容都始终作为注释而被忽略。

提示:IgnoreCase、Singleline、Global、Multiline、RightToLeft、Extended 这几个属性可用flags参数来设置(后面会讲到),也可以说这几个属性是多余的,只是为了兼容VBScript.RegExp 正则的语法而增加了。

方法

描述

Execute

该方法用来查找字符串,找到的字符串将通过MatchCollection集合返回。

Replace

这个方法用于替换在正则表达式搜索中找到的文本。

Test

Test方法对字符串执行正则表达式搜索,并返回一个布尔值说明匹配是否成功。

Split *

按照指定的表达式字符串对目标字符串进行分割并返回一维数组。

二、NewXing.MatchCollection 对象

MatchCollection 是集合对象,包含有关匹配字符串的信息,该对象包含每个成功匹配的 Match 对象。

属性

描述

Count

匹配对象的总数。

Item

匹配对象的索引。

三、NewXing.Match 对象

Match 是成功匹配的对象。

属性

描述

FirstIndex

匹配对象所匹配字符串的起始位置。

Length

匹配对象所匹配字符串的字符长度。

SubMatches

匹配对象所匹配结果的子项,返回SubMatches集合。通过该集合可以获取匹配到的各个命名分组结果。

Value

匹配对象所匹配的值。

Named *

通过命名分组的名字来获取匹配到的结果。

四、NewXing.SubMatches 对象

SubMatches 得到当次匹配到的所有“分组”结果集合。

属性

描述

Count

分组总数

Item

匹配到的结果索引。

五、最后说一下NewXing.RegExp 对象的4个方法的相关参数与作用。

语法:

  1. Execute

Execute (sourceString As String, [pattern As String], [flags As String], [start As Long] = -1) As MatchCollection

  1. Replace

Replace (sourceString As String, replaceVar As String, [pattern As String], [flags As String], [start As Long] = -1, [times As Long] = -1) As String

  1. Test

Test (sourceString As String, [pattern As String], [flags As String], [start As Long] = -1) As Boolean

  1. Split

Split (sourceString As String, [pattern As String], [flags As String], [start As Long] = -1, [times As Long] = -1) As Object 参数说明:

参数

描述

sourceString

必填参数,用来匹配的文本。

replaceVar

必填参数,是用来替代的字符串。Replace 方法中才用到该参数。

pattern *

可选参数,设置正则表达式。如果RegExp.pattern 属性中已设置那么这个参数可忽略,如果两者同时设置,将会选用本参数的表达式进行匹配。

flags *

可选参数,表达式匹配模式。值为:i、s、g、m、r、x以上字母分别代表:IgnoreCase、Singleline、Global、Multiline、RightToLeft、Extendedi、s、g、m、r、x 可随意组合。例如:RegExp.IgnoreCase = TrueRegExp.Global = True可直接用该参数 ig 来代替。当您设置了该参数的值后 IgnoreCase、Singleline、Global、Multiline、RightToLeft、Extended这6个属性的设置就不起作用了。

start *

可选参数,开始查找匹配的位置。

times *

可选参数,replace方法中用于指定进行替换的次数。默认(-1)表示替换所有匹配。 split 方法中用于指定可拆分为多少个数组,默认拆分所有。

示例:

代码语言:javascript
复制
Regex = Createobject("NewXing.RegExp")
Regex.IgnoreCase = .t.
Regex.Global = .T.
?Regex.Replace("aa 11 bb 22 33", "[$1]","(\d+)")

以上的代码也可以简化为以下这样。 注:我发现在VFP下Regex.Pattern = "(\d+)"没有达到预期的效果。

替换代码

代码语言:javascript
复制
Regex = CreateObject("NewXing.RegExp")
?Regex.Replace("aa 11 bb 22 33", "[$1]", "(\d+)", "ig")
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 加菲猫的VFP 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、NewXing.RegExp 对象
  • 二、NewXing.MatchCollection 对象
    • 三、NewXing.Match 对象
    • 四、NewXing.SubMatches 对象
    • 五、最后说一下NewXing.RegExp 对象的4个方法的相关参数与作用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档