当前位置: 首页 > news >正文

王野天保定百度seo排名

王野天,保定百度seo排名,我的公众号,软件开发在大学属于什么专业一、匹配场景 判断一个句子是不是正规英文句子 text "I am a student" 一个正常的英文句子如上,英文单词 空格隔开 英文单词 多个英文字符 [a-zA-Z] 空格用 \s 表示 那么一个句子就是单词 空格(一个或者多个,最后那个单词…

一、匹配场景

判断一个句子是不是正规英文句子

text = "I am a student"

一个正常的英文句子如上,英文单词  + 空格隔开

英文单词 = 多个英文字符 [a-zA-Z] 

空格用 \s 表示

那么一个句子就是单词 + 空格(一个或者多个,最后那个单词是0个)(可能有多个单词+空格)+ 最后一个句号 .

那正则就是 

^([a-zA-Z]+(\s)*)+$

 JAVA代码

public static void main(String[] args) {String text = "I am a good student";String regex = "^([a-zA-Z]+(\\s)*)+$";Pattern pattern = Pattern.compile(regex);Matcher matcher = pattern.matcher(text);System.out.println(matcher.find());System.out.println(matcher.group(0));}

输出结果: 

true
I am a good student

二、性能测试

regex101: build, test, and debug regexRegular expression tester with syntax highlighting, explanation, cheat sheet for PHP/PCRE, Python, GO, JavaScript, Java, C#/.NET, Rust.icon-default.png?t=N7T8https://regex101.com/

句子改成:I am a good good student

匹配成功了。39 step,耗时0.1ms,

但是假如把句子拉长点,最后加上一个问号 

I am a good good student

83408 step,耗时5.4ms

假如把句子再拉长点,那么直接就干爆CPU,耗时指数增长,

为啥会这样呢?

三、正则的回溯陷阱

1、了解下NFA与DFA

  • DFA (Deterministic finite automaton) 确定型有穷自动机
  • NFA (Non-deterministic finite automaton) 非确定型有穷自动机

DFA :遍历text字符串,去和Pattern匹配

NFA:遍历Pattern,去与text匹配

DFA(是电动机) 和NFA(汽油机) 都有很长的历史,不过,正如汽油机一样,NFA 的历史更长一些。也有些系统采用了混合引擎,它们会根据任务的不同选择合适的引擎(甚至对同一表达式中的不同部分采用不同的引擎,以求得功能与速度之间的最佳平衡)。 ——《精通正则表达式》

绝大多数编程语言都选择的引擎——NFA (非确定型有穷自动机) 引擎

2、NFA的回溯

字符串 :abc

表达式:a(d|b)c

注意这个位置回退!!!

3、简易例子分析

表达式 = ^(a*)+$
文本 = aaaaaaaaaaaaaaab

走了16w步,花了7.3ms

  1. 首先 (a*) 已经匹配到 aaaaaaaaaaaaaaa 了,
  2.  (a*)+ 也匹配到 aaaaaaaaaaaaaaa ,
  3. 结束符$去匹配的时候,发现text不是结束,而是一个b
  4. 那吐出最后的a,变成 (aaaaaaaaaaaaaa) a ,没匹配上,继续吐
a*               a*
(aaaaaaaaaaaaa) (aa)a*              a* a*
(aaaaaaaaaaaaa) (a)(a)a*              a* 
(aaaaaaaaaaaa) (aaa)a*              a* a*
(aaaaaaaaaaaa) (aa)(a)a*              a* a* a*
(aaaaaaaaaaaa) (a)(a)(a)--> 吐到最后
(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)

直接干爆CPU 

4、咋优化?

1、对于  ^(a*)+$

直接把表达式

 ^(a*)+$

改成 ^(a*)$

把后面的 + 号去掉。

直接就是 5 Step,0.1ms

2、对于 ^([a-zA-Z]+(\s)*)+$

把后面的 + 号去掉。就不回溯了,

但是匹配不上,因为语句有问题,就是空格必须存在,但是最后的空格不存在

所以改成 :^[a-zA-Z]+(\s[a-zA-Z]+)*$

遇到问号也不回溯

去掉问号也匹配上了

http://www.mmbaike.com/news/30306.html

相关文章:

  • 网络营销方式可分为无站点网络营销和什么经典营销案例100例
  • 医疗网站模板免费下载网站seo基础优化
  • 擦边球网站做国内还是国外好查排名的软件有哪些
  • 重庆专业做网站搜索引擎优化seo多少钱
  • 天津建网站的公司百度100%秒收录
  • 给网站加织梦后台seo排名优化排行
  • 个人域名怎么做社交网站12月10日新闻
  • 增城有什么网站做招聘的网络服务有哪些
  • phpcms v9农业网站模板百度网络电话
  • 南京网站优化网站建设公司怎么自己建立一个网站
  • 做的网站很卡是什么原因百度有专做优化的没
  • 哪个网站可以做公务员题外链群发
  • web网站如何做负载均衡百度网盘搜索引擎入口哪里
  • 广州做网站的网络公司网页制作软件有哪些
  • 校园网站开发背景百度快速排名用是
  • 网站设计制作案例百度标注平台怎么加入
  • 做网站平方根怎么表示武汉疫情最新情况
  • 广西建设职业技术学院整站seo服务
  • 中国建设银行北京招聘信息网站网络服务器搭建
  • 三水建设局网站搜索引擎营销的原理是什么
  • 沈阳专业seo快速排名优化推广排名
  • 大足专业建站公司如何推广外贸型网站
  • 南山的网站设计常见的搜索引擎有哪些
  • 智能建站系统开发关键词搜索查询
  • 做电商网站赚钱吗seo优化的优点
  • 重庆建设工程信息网证书查询官网太原关键词排名优化
  • 3 建设营销型网站流程图百度推广seo优化
  • 百度商桥怎么和网站写软文的平台有哪些
  • 网站上的图标用什么软件做的四川百度推广排名查询
  • 网站优化分析软件可以看封禁网站的浏览器