我的编程空间,编程开发者的网络收藏夹
学习永远不晚

VB.NET正则表达式的示例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

VB.NET正则表达式的示例分析

小编给大家分享一下VB.NET正则表达式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.选择符

VB.NET正则表达式中“ ¦”表示选择。你可以用选择符匹配多个可能的正则表达式中的一个。如果你想搜索文字“cat”或“dog”,你可以用﹤﹤cat ¦dog> > 。如果你想有更多的选择,你只要扩展列表﹤﹤cat ¦dog ¦mouse ¦fish> > 。选择符在正则表达式中具有***的优先级,也就是说,它告诉引擎要么匹配选择符左边的所有表达式,要么匹配右边的所有表达式。你也可以用圆括号来限制选择符的作用范围。如﹤﹤\b(cat ¦dog)\b> > ,这样告诉正则引擎把(cat ¦dog)当成一个正则表达式单位来处理。

注意正则引擎的“急于表功”性正则引擎是急切的,当它找到一个有效的匹配时,它会停止搜索。因此在一定条件下,选择符两边的表达式的顺序对结果会有影响。假设你想用正则表达式搜索一个编程语言的函数列表:Get,GetValue,Set或SetValue。一个明显的解决方案是﹤﹤Get ¦GetValue ¦Set ¦SetValue> > 。让我们看看当搜索SetValue时的结果。因为﹤﹤Get> > 和﹤﹤GetValue> > 都失败了,而﹤﹤Set> > 匹配成功。因为正则导向的引擎都是“急切”的,所以它会返回***个成功的匹配,就是“Set”,而不去继续搜索是否有其他更好的匹配。和我们期望的相反,正则表达式并没有匹配整个字符串。有几种可能的解决办法。

一是考虑到正则引擎的“急切”性,改变选项的顺序,例如我们使用﹤﹤GetValue ¦Get ¦SetValue ¦Set> > ,这样我们就可以优先搜索最长的匹配。我们也可以把四个选项结合起来成两个选项:﹤﹤Get(Value)? ¦Set(Value)?> > 。因为问号重复符是贪婪的,所以SetValue总会在Set之前被匹配。一个更好的方案是使用单词边界:﹤﹤\b(Get ¦GetValue ¦Set ¦SetValue)\b> > 或﹤﹤\b(Get(Value)? ¦Set(Value)?\b> > 。更进一步,既然所有的选择都有相同的结尾,我们可以把正则表达式优化为﹤﹤\b(Get ¦Set)(Value)?\b> > 。

2.组与向后引用

把正则表达式的一部分放在圆括号内,你可以将它们形成组。然后你可以对整个组使用一些正则操作,例如重复操作符。要注意的是,只有圆括号“()”才能用于形成组。“[]”用于定义字符集。“{}”用于定义重复操作。当用“()”定义了一个正则表达式组后,正则引擎则会把被匹配的组按照顺序编号,存入缓存。当对被匹配的组进行向后引用的时候,可以用“\数字”的方式进行引用。﹤﹤\1> > 引用***个匹配的后向引用组,﹤﹤\2> > 引用第二个组,以此类推,﹤﹤\n> > 引用第n个组。而﹤﹤\0> > 则引用整个被匹配的正则表达式本身。我们看一个例子。假设你想匹配一个HTML标签的开始标签和结束标签,以及标签中间的文本。比如 Thisisatest ,我们要匹配 和 以及中间的文字。我们可以用如下正则表达式:“ <([A-Z][A-Z0-9]*)[^> ]*> .*? ”首先,“ <”将会匹配“ ”的***个字符“ <”。然后[A-Z]匹配B,[A-Z0-9]*将会匹配0到多次字母数字,后面紧接着0到多个非“> ”的字符。***正则表达式的“> ”将会匹配“ ”的“> ”。

接下来正则引擎将对结束标签之前的字符进行惰性匹配,直到遇到一个“ ”你可以对相同的后向引用组进行多次引用,﹤﹤([a-c])x\1x\1> > 将匹配“axaxa”、“bxbxb”以及“cxcxc”。如果用数字形式引用的组没有有效的匹配,则引用到的内容简单的为空。一个后向引用不能用于它自身。﹤﹤([abc]\1)> > 是错误的。因此你不能将﹤﹤\0> > 用于一个正则表达式匹配本身,它只能用于替换操作中。后向引用不能用于字符集内部。﹤﹤(a)[\1b]> > 中的﹤﹤\1> > 并不表示后向引用。在字符集内部,﹤﹤\1> > 可以被解释为八进制形式的转码。向后引用会降低引擎的速度,因为它需要存储匹配的组。如果你不需要向后引用,你可以告诉引擎对某个组不存储。例如:﹤﹤Get(?:Value)> > 。其中“(”后面紧跟的“?:”会告诉引擎对于组(Value),不存储匹配的值以供后向引用。

重复操作与后向引用当对组使用重复操作符时,缓存里后向引用内容会被不断刷新,只保留***匹配的内容。例如:﹤﹤([abc]+)=\1> > 将匹配“cab=cab”,但是﹤﹤([abc])+=\1> > 却不会。因为([abc])***次匹配“c”时,“\1”代表“c”;然后([abc])会继续匹配“a”和“b”。***“\1”代表“b”,所以它会匹配“cab=b”。应用:检查重复单词--当编辑文字时,很容易就会输入重复单词,例如“thethe”。使用﹤﹤\b(\w+)\s+\1\b> > 可以检测到这些重复单词。要删除第二个单词,只要简单的利用替换功能替换掉“\1”就可以了。

组的命名和引用在PHP,Python中,可以用﹤﹤(?Pgroup)> > 来对组进行命名。在本例中,词法?P就是对组(group)进行了命名。其中name是你对组的起的名字。你可以用(?P=name)进行引用。.NET的命名组.NETframework也支持命名组。不幸的是,微软的程序员们决定发明他们自己的语法,而不是沿用Perl、Python的规则。目前为止,还没有任何其他的正则表达式实现支持微软发明的语法。

下面是.NET中的例子:(?group)(?’second’group)正如你所看到的,.NET提供两种词法来创建命名组:一是用尖括号“ <> ”,或者用单引号“’’”。尖括号在字符串中使用更方便,单引号在ASP代码中更有用,因为ASP代码中“ <> ”被用作HTML标签。要引用一个命名组,使用\k或\k’name’.当进行搜索替换时,你可以用“${name}”来引用一个命名组。

3.VB.NET正则表达式的匹配模式

本教程所讨论的正则表达式引擎都支持三种匹配模式:﹤﹤/i> > 使正则表达式对大小写不敏感,﹤﹤/s> > 开启“单行模式”,即点号“.”匹配新行符﹤﹤/m> > 开启“多行模式”,即“^”和“$”匹配新行符的前面和后面的位置。

在正则表达式内部打开或关闭模式如果你在正则表达式内部插入修饰符(?ism),则该修饰符只对其右边的正则表达式起作用。(?-i)是关闭大小写不敏感。你可以很快的进行测试。﹤﹤(?i)te(?-i)st> > 应该匹配TEst,但是不能匹配teST或TEST.

4.原子组与防止回溯

在一些特殊情况下,因为回溯会使得引擎的效率极其低下。
让我们看一个例子:要匹配这样的字串,字串中的每个字段间用逗号做分隔符,第12个字段由P开头。我们容易想到这样的正则表达式﹤﹤^(.*?,){11}P> > 。这个正则表达式在正常情况下工作的很好。但是在极端情况下,如果第12个字段不是由P开头,则会发生灾难性的回溯。如要搜索的字串为“1,2,3,4,5,6,7,8,9,10,11,12,13”。首先,正则表达式一直成功匹配直到第12个字符。这时,前面的正则表达式消耗的字串为“1,2,3,4,5,6,7,8,9,10,11,”,到了下一个字符,﹤﹤P> > 并不匹配“12”。所以引擎进行回溯,这时正则表达式消耗的字串为“1,2,3,4,5,6,7,8,9,10,11”。继续下一次匹配过程,下一个正则符号为点号﹤﹤.> > ,可以匹配下一个逗号“,”。然而﹤﹤,> > 并不匹配字符“12”中的“1”。匹配失败,继续回溯。大家可以想象,这样的回溯组合是个非常大的数量。因此可能会造成引擎崩溃。

用于阻止这样巨大的回溯有几种方案:一种简单的方案是尽可能的使匹配精确。用取反字符集代替点号。例如我们用如下正则表达式﹤﹤^([^,\r\n]*,){11}P> > ,这样可以使失败回溯的次数下降到11次。另一种方案是使用原子组。原子组的目的是使正则引擎失败的更快一点。因此可以有效的阻止海量回溯。原子组的语法是﹤﹤(?> 正则表达式)> > 。位于(?> )之间的所有正则表达式都会被认为是一个单一的正则符号。一旦匹配失败,引擎将会回溯到原子组前面的正则表达式部分。前面的例子用原子组可以表达成﹤﹤^(?> (.*?,){11})P> > 。一旦第十二个字段匹配失败,引擎回溯到原子组前面的﹤﹤^> > 。

以上是“VB.NET正则表达式的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

VB.NET正则表达式的示例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

VB.NET正则表达式的示例分析

小编给大家分享一下VB.NET正则表达式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.选择符 VB.NET正则表达式中“ ¦”表示选择
2023-06-17

jmeter正则表达式的示例分析

小编给大家分享一下jmeter正则表达式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!使用jmeter时经常有这样的情况:一个完整的操作流程,需先完成某个操作,获得某个值或数据信息,然后才能进行下一步的操作(也就
2023-06-14

正则表达式组的示例分析

这篇文章主要为大家展示了“正则表达式组的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“正则表达式组的示例分析”这篇文章吧。正则表达式组的理解把正则表达式的一部分放在圆括号内,你可以将它们
2023-06-17

Java中正则表达式的示例分析

这篇文章主要介绍了Java中正则表达式的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前几天线上一个项目监控信息突然报告异常,上到机器上后查看相关资源的使用情况,发现
2023-06-15

C#中正则表达式的示例分析

这篇文章将为大家详细讲解有关C#中正则表达式的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。(1)“@”符号符下两ows表研究室的火热,当晨在“@”虽然并非C#正则表达式的“成员”,但是它经常与C
2023-06-18

Linux命令中正则表达式的示例分析

小编给大家分享一下Linux命令中正则表达式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!命令中的正则表达式 如果要在命令输出或文本中筛选内容时使用模糊
2023-06-09

Dreamweaver中正则表达式搜索的示例分析

这篇文章主要为大家展示了“Dreamweaver中正则表达式搜索的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Dreamweaver中正则表达式搜索的示例分析”这篇文章吧。比如: <
2023-06-08

Linux的正则表达式实例分析

今天小编给大家分享一下Linux的正则表达式实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。正则表达式(regular
2023-06-27

Python正则表达式实例分析

这篇“Python正则表达式实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python正则表达式实例分析”文章吧。一
2023-06-29

Java正则表达式入门基础的示例分析

这篇文章主要为大家展示了“Java正则表达式入门基础的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java正则表达式入门基础的示例分析”这篇文章吧。正则表达式是一种文本模式,包括普通字
2023-05-30

Linux--shell脚本之正则表达式的示例分析

小编给大家分享一下Linux--shell脚本之正则表达式的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、正则表达式的概念及特点:正则表达式是对字符串
2023-06-09

linux 正则表达式grep实例分析

在很多技术领域(如:自然语言处理,数据存储等),正则表达式可以很方便的提取我们想要的信息,所以正则表达式是一个很重要的知识点! 一、概念 正则表达式(Regular Expression)是用于描述一组字符串特征的模式,用来匹配特定的字符串
2022-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录