8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

从下面的HTML代码片段中匹配 到 span#test 标签内容1

2

3

4

5

6

7

8

9

hi~

虫虫

早上好。

首先要找到 标签 和 标签 ,如果这两个不会,后面不用看了……补基础吧~~1

2

3

4//起始

]*id="test"[^>]*>

//结束

我们会发现代码中夹杂着多个HTML标签,em还好,因为正则里面写死了是 span, 所以它是可以直接忽略掉的, 但是多余的 会造成干扰。那么如果是在程序中,我们是怎么处理的呢? 可以使用计数器(或者说是stack结构,但是我们只需要关心里面的元素个数,所以使用计数器就行了)。从id=”test” 后面的开始处理,遇到 计数+1 ,遇到 时,如果计数>0则-1否则 就匹配到了找到#test 的span 后开始,(如果找不到这个id的span,其实可以直接结束匹配了)

var c = 0; // 初始栈

遇到 ,入栈,栈内标签数量: c=c+1=1;

遇到 ,入栈: c=c+1=2;

遇到虫虫后面的 (关闭span3) , 因为 c>0 所以c=c-1=1;

下一个 (关闭span1), 因为 c>0 所以所以c=c-1=0;

遇到 c=c+1 = 1

下一个 (关闭span3), 因为 c>0 所以所以c=c-1=0;

下一个 (关闭test),因为此时 c==0 , 所以匹配到这里结束了。

有同学会纠结标签怎么办?em并不是我们要查找的标签名称,直接当普通字符串忽略掉就是了……

根据这个思路 ,我们可以使用正则表达式中平衡组的概念,首先将span定义到一个分组中,那么查找 #test 的开始标签就可以是

]*id="test"[^>]*> 结束符使用反向引用 说明一下:

(?'分组名'表达式) 表示将表达式匹配到的内容放入分组中。

k'分组名' 表示引用之前的分组。

上面的例子中 (?'tag'span) 表达式是 span 如果匹配到这四个字符的话,放进名称为 tag 的组中。那么后面k'tag' 其实就是匹配 span字符。

中间部分情况比较多:一类是普通字符,包含类似这样的标签,直接使用 ([dD])

一类是span的标签,我们同样,定义一个计数器 c 专门处理它:

遇到开始标签时 c+1 使用 (?'c']*>) // 其实是将匹配到的标签推送到c组

遇到结束标签时 c-1 使用 (?'-c']*>) // 其实是如果匹配到结束标签,从c组移除一个匹配项

上面这几个情况可以重复任意次,于是用(......)*,将它们串起来得到

((?'c']*>)|(?'-c']*>)|([dD]))*

最后,加上头尾的两个标签,最终的正则表达式是:

]*id="test"[^>]*>((?'c']*>)|(?'-c']*>)|([dD]))*

如果 #test 不是 span 而是其他标签,为了匹配到任意标签,可以把span替换成 w+

]*id="test"[^>]*>((?'c']*>)|(?'-c']*>)|([dD]))*

匹配结果是:1

2

3

4

5

6

7

hi~

虫虫

早上好。

如果不需要带标签,只要里面的内容,那么加上两个断言

(?<=(]*id="test"[^>]*>))((?'c']*>)|(?'-c']*>)|([dD]))*(?=())

匹配结果是 hi~

虫虫

早上好。

说明一下

(?<=表达式) :前面要包含表达式匹配到的项目,但是不会被匹配进去

(?=表达式) :后面要包含表达式匹配到的项目,但是不会被匹配进去

平衡正则 html,正则表达式-利用平衡组匹配html相关推荐

  1. python正则表达式开头和结尾_Python 基础之正则之一 单字符,多字符匹配及开头结尾匹配...

    一.正则表达式之单个字符匹配 格式:lst = re.findall(正则表达式,要匹配的字符串) 预定义字符集 匹配内容 .匹配任意字符,除了换行符\n \d匹配数字 \D匹配非数字 \w匹配字母或 ...

  2. java正则出现次数_正则表达式(二)—匹配次数的正则

    正则表达式 匹配次数的正则 在前一篇文章中,我们总结了和位置相关的正则,在这篇文章中,我们将继续学习正则表达式其它的内容. 假如现在给你一个regular_1.txt文件,让你找出含有连续2个a的行, ...

  3. matlab读取正则找科学,Matlab正则表达式(递归、匹配上下文等)(转载)

    元字符 描述 .点 匹配任何单个字符.例如正则表达式r.t匹配这些字符串:rat.rut.r t,但是不匹配root. $ 匹配行结束符.例如正则表达式weasel$ 能够匹配字符串"He' ...

  4. java 正则匹配多个_Java正则多次匹配和多次组匹配

    关于正则表达式 , 可以学习下这篇介绍 : 正则表达式 对于多次匹配, 正则表达式就需要讲究些技巧了. 替换 单文的多次匹配 有以下几种方式 , 把a全匹配替换 替换 a "aab" ...

  5. 正则学习(2)--- 简单匹配原理

    写写对简单的匹配原理的理解,还是以php为主. 首先,正则引擎主要可分为两大类:DFA和NFA,反正引擎见多了就不奇怪了,简单理解就是不同的匹配方式,就好比在数组中查找数据时,有的是从头开始顺序,查找 ...

  6. 正则表达式之 NFA 引擎匹配原理详解

    文章目录 一.为什么要了解引擎匹配原理 二.正则表达式引擎 三.预备知识 (一)字符串组成 (二)占有字符和零宽度 (三)控制权和传动 四.正则表达式简单匹本过程 (一)基础匹配过程 (二)含有匹配优 ...

  7. 利用IP组播技术传输视频信息

    利用IP组播技术传输视频信息   随着全球互联网(Internet)的迅猛发展,上网人数正以几何级数快速增长,以因特网技术为主导的数据通信在通信业务总量中的比列迅速上升,因特网业务已成为多媒体通信业中 ...

  8. matlab用之前的计算结果递归,[转载]Matlab正则表达式(递归、匹配上下文等)(转载)...

    元字符 描述 .点 匹配任何单个字符.例如正则表达式r.t匹配这些字符串:rat.rut.r t,但是不匹配root. $ 匹配行结束符.例如正则表达式weasel$ 能够匹配字符串"He' ...

  9. java 字符串正则替换(替换字符串包含匹配到的字符串)

    "南风知我意,吹梦到西洲" 很多时候我们需要对文本进行替换,简单地使用replace方法就可以了.复杂的就需要使用正则:java提供了正则相关的类Pattern 和Matcher ...

最新文章

  1. 友元函数、类的非静态成员函数、静态成员函数的区别
  2. 竞赛提升:必知必会的21篇论文!
  3. mysql localhost和127.0.0.1的区别
  4. 十大经典排序算法之快速排序及其优化
  5. sas Data步数据读取流程详解
  6. pdb 调试python
  7. bomb android实战,android 仿qq app源码下载(bmob)
  8. node 升级_那些修改node_modules的骚操作
  9. Open3d之八叉树(Octree)
  10. pandas 中的模糊匹配
  11. TurboMail邮件系统促进马可波罗瓷砖集团迅猛发展
  12. JS获取IP、MAC和主机名的五种方法
  13. 僵尸网络--botnet--DDoS 章2
  14. 架构之美-读书笔记之二
  15. 十款真正的编程游戏软件
  16. 推荐系统笔记(二):常用数据集Movielens学习
  17. python图片镜像翻转_OpenCV Python 翻转(镜像)图片 cv.flip
  18. 瞎聊高速公路与主干道的立交匝道设计
  19. 3D设计再次证实了“眼见为实”不靠谱
  20. 腾讯手游助手吃鸡一直服务器繁忙,腾讯手游助手吃鸡手游常见问题解决办法介绍...

热门文章

  1. 区块链带来的价值包括哪些_爱链社区干货:区块链技术为冷链物流带来的了那些价值?...
  2. java中蛇的属性有哪些_学习Java类的属性
  3. Android Retrofit @Streaming 注解失效(二)
  4. Trie(前缀树/字典树)及其应用
  5. Linux防火墙命令
  6. 关于BitmapImage EndInit()时报值不在范围内的异常
  7. MFC中的消息处理函数
  8. SSL 1055——能量项链_DP
  9. iOS 系统版本判断
  10. 《计算机图形学》2.1.7 立体感和虚拟现实系统