Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >加强版正则表达式,邮箱,手机号防呆好用得不得了

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

作者头像
加菲猫的VFP
发布于 2022-05-26 01:21:14
发布于 2022-05-26 01:21:14
1K00
代码可运行
举报
文章被收录于专栏:加菲猫的VFP加菲猫的VFP
运行总次数:0
代码可运行

正则表达式是什么?

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

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

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

首先来两段代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
* 判断邮箱名称是否有效
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
代码运行次数:0
运行
AI代码解释
复制
Regex = Createobject("NewXing.RegExp")
Regex.IgnoreCase = .t.
Regex.Global = .T.
?Regex.Replace("aa 11 bb 22 33", "[$1]","(\d+)")

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

替换代码

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
VBA:正则表达式(1) - 基础篇
正则表达式,常被用来检验、替换符合某个模式(规则)的字符串,在代码中常缩写为regexp。VBA中并没有直接提供正则表达式的对象,需要借助VBScript的正则对象。
Exploring
2023/09/10
3.5K0
VBA:正则表达式(1) - 基础篇
在VBA中,如何应用正则表达式
在VBA中,正则表达式可以使用VBScript Regular Expressions库来实现。以下是VBScript Regular Expressions库中常用的一些方法和属性:
哆哆Excel
2024/01/19
9600
在VBA中,如何应用正则表达式
网络爬虫 | 正则表达式
Python中所有正则表达式的函数都在re模块中,向re.compile()传入一个字符串值,表示正则表达式,它将返回一个regex模式对象。
数据STUDIO
2021/06/24
1.3K0
VBA:正则表达式(2) -批量修改内容
文章背景: 工作中,有时需要批量更新单元格内的信息。可以通过正则表达式匹配对应信息,然后再更新成自己想要的内容。
Exploring
2023/09/11
6840
VBA:正则表达式(2) -批量修改内容
正则表达式基础
基本语法 基本语法_菜鸟教程 用\表示特殊形式或允许使用特殊字符,而不调用其特殊含义 不以任何特殊方式在字符串字面值中以'r'前缀处理反斜杠 所以r'\n'包含'\'和'n'两个字符,而'\n'
JNJYan
2019/01/18
7410
正则表达式学习笔记
正则表达式 1. 使用正则 创建正则表达式有两种方式,一种是以字面量方式创建,另一种是使用RegExp构造函数来创建。 var expression = / pattern / flags; var expression = new RegExp( pattern / flags ); var expression = new RegExp( patternStr, flags ); // example var regexp = /regexp/g; var regexp = new RegExp('r
糊糊糊糊糊了
2018/05/09
1.4K0
正则表达式大全
正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在"\"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后/\b/,转意为匹配一个单词的边界。 -或- 对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"\"后,/a\*/将只匹配"a*"。 ^ 匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a" $ 匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配"an A" * 匹配前面元字符0次或多次,/b
Hongten
2018/09/18
4.6K0
JavaScript正则表达式
正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列符合某个句法规则的字符串搜索模式,是用于匹配字符串中字符组合的模式。
Leophen
2019/08/23
8430
正则表达式入门
前端往往有大量的表单数据校验的工作,采用正则表达式会使得数据校验的工作量大大减轻,如邮箱验证,手机号码,等等。比起用字符串的函数来判断简单,易用。
Daotin
2020/09/16
9120
有必要了解的正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。学习正则表达式很大程度上就是学习正则表达式的语法规则。
AI码真香
2022/09/13
7630
正则表达式的使用
preg_filter 执行正则表达式搜索和替换 preg_grep 返回匹配模式的数组条目 preg_last_error 返回最后一个正则执行产生的错误代码 preg_match_all 执行一个全局正则表达式匹配 preg_match 执行一个正则表达式匹配 preg_quote 转义正则表达式字符 preg_replace_callback_array 执行一个正则表达式搜索并且使用一个回调函数进行替换 preg_replace_callback 执行一个正则表达式搜索并且使用一个回调进行替换 preg_replace 执行一个正则表达式的搜索和替换 preg_split 通过一个正则表达式分隔字符串
ianzhi
2019/07/31
9610
JavaScript 正则表达式全面总结
正则表达式是用于匹配字符串中字符组合的模式。正则表达式的模式规则是由一个字符序列组成的。包括所有字母和数字在内,大多数的字符都是直接按照直接量描述待匹配的字符。除此之外,正则表达式还有其他特殊语义的字符,这些字符不按照特殊含义进行匹配。
全栈程序员站长
2022/09/07
1K0
正则表达式之javascript
1.正则表达式的定义 描述字符模式的对象,JavaScript的RepExp类表示正则表达式
Jack Chen
2018/09/14
8080
VBA:正则表达式(6) -文本设置下划线
示例:数据保存在A列中,需要对其中的音标部分标注下划线,如C列所示。匹配这样的非典型字符,正则表达式是最佳选择。
Exploring
2023/09/28
4590
VBA:正则表达式(6) -文本设置下划线
13.Excel VBA使用正则表达式
正则表达式是一种跨语言的字符串处理机制,就像数学运算符一样,是自成体系的。在Excel VBA中使用正则表达式的方式也很简单。
用户4381798
2020/07/30
2.2K0
python正则表达式
  正则表达式(regex)是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
yaohong
2020/06/19
8890
正则表达式来了,Excel中的正则表达式匹配示例
当需要在单元格区域中找到某个值时,可以使用MATCH函数。在单元格中查找特定字符串时,FIND函数和SEARCH函数非常方便。如何知道单元格中是否包含与给定模式匹配的信息?显然,可以使用正则表达式。
fanjy
2021/11/10
22.4K0
正则表达式来了,Excel中的正则表达式匹配示例
Python 中的正则表达式全部用法速查
正则表达式可以拼接,如果A和B都是正则表达式,那么 AB也是正则表达式.如果字符串p匹配A并且另一个字符串q匹配B, 那么pq可以匹配 AB.这就构成了由简单构建复杂的基础.除非:
用户7886150
2020/12/23
1.2K0
正则表达式
一、概述 正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,有点像字符串的模板,常常用作按照“给定模式”匹配文本的工具。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 JavaScript通过内置对象RegExp支持正则表达式,有两种方式创建正则表达式对象。例如,如果我们想匹配字符串中所有"at"的实例,可以这么写: 第一种:使用字面量,以斜杠表示开始和结束。 var
小胖
2018/06/27
5580
1 认识正则表达式
正则表达式(Regular Expression,简称regexp)是一种描述字符串结构的语法规则。
张哥编程
2024/12/13
1120
相关推荐
VBA:正则表达式(1) - 基础篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验