1. 为什么谈有限自动机时要谈正则表达式?原因是:正则表达式所匹配的所有字符串所构成的语言可以用有限自动机识别。根本原因是:正则集(正则表达式所匹配的所有字符串集合)是由右线性文法(3型文法)所产生的语言,两者是等同的。

2. 单词拼写检查

有限自动机除了可以匹配正则表达式描述的字符集(语言),也可以用来做单词拼写检查。当然还是要基于字符变化距离度量来提供候选串的。具体操作就是:

设T为字母表,可构造一个识别字母表T上的字母构成的所有合法单词的有限自动机。该自动机对应的状态转换图可看作是一个边上有字母标记的有向图。那么,字母表T上的字母构成的所有合法单词都对应着有限自动机中的一条从初始状态到终止状态的路径。字符串识别的过程就是对有向图从初始状态到终止状态遍历的过程,一条路径从初始状态到终止状态经过的所有弧上的字母连接起来构成一个字符串。给定一个字符串,对其进行拼写检查的过程实际上是在给定阈值t(t>0)的范围内,寻找那些与输入串的编辑距离小于t的路径,这些路径从初始状态到终止状态经过的所有弧上的字母连接起来构成的字符串,就是要找的与输入串最相似的单词。

自动机的实现,按照何晗的文章

https://www.hankcs.com/nlp/%E7%AC%AC3%E7%AB%A0-%E5%BD%A2%E5%BC%8F%E8%AF%AD%E8%A8%80%E4%B8%8E%E8%87%AA%E5%8A%A8%E6%9C%BA.html​www.hankcs.com

所述,关于有限自动机找出正确字串,修改图的深度优先搜索算法即可,弄个stack,注意剪枝就行。

编辑距离指的是Damerau所定义的编辑距离,即两个字符串之间的编辑距离等于使一个字符串变成另一个字符串而进行的插入、删除、替换或相邻字符交换位置而进行操作的最少次数。编辑距离可以参考何晗搜集整理的

https://www.hankcs.com/program/java/several-string-edit-distance-achieved.html​www.hankcs.com

我之前找到过一个Python版本的,但是那时候没有写知乎,又不知道哪去了。什么语言不重要,知道实现过程比较重要,怎么优化不重要,因为没见过会优化的。

基于有限自动机的单词拼写检查完整实现,没有找到合适的代码,有关拼写检查的仓库有:

  • https://github.com/hunspell/hunspell star最多的一个拼写检查
  • https://github.com/jmoy/norvig-spell norvig拼写检查的各种编程语言实现
  • https://github.com/barrust/pyspellchecker norvig拼写检查的纯Python实现
  • https://github.com/bakwc/JamSpell

有关于拼写检查这个事,有时间再写其他文章说。写形式语言自动机主要就是为了补上2型上下文无关文法以及对应的下推自动机。

3.grep命令

虽然说操作机器是最没脑子的技术,但是还是把它弄熟,然后再狠狠地鄙视,跟导数据一样,一个月开200块钱都多,就是个女工接线头。

$ cat kkk
akkk
test file
oooo
ppppp# 在文件kkk中搜索匹配字符串"test file"
$ grep "test file" kkk
test file# 在文件kkk中搜索匹配字符串"es",并且加上行号输出
$ grep -n es kkk
2:test file# 显示所有以d开头的文件中包含"test"的行数据内容
$ cat d1
1
test1
$ cat d2
2
test2
$ grep 'test' d*
d1:test1
d2:test2# 在文件aa中显示所有包含至少有5个连续小写字符的行数据内容
$ cat aa
aaaaa
bbb
AAAAA
BBB
aaaaaa
$ grep -E "[a-z]{5}" aa
aaaaa
aaaaaa# 查找sshd进行信息
# ps -ef|grep sshd
root      3390  3376  0 09:09 pts/2    00:00:00 grep --color=auto sshd# 在aa文件中找出以b开头的行内容
$ grep "^b" aa
bbb# 在kkk文件中输出以le结尾的行内容
$ grep -E "le$" kkk
test file# 在kkk文件中输出包含es或 kk的行内容
$ grep -E "(es)|(kk)" kkk
akkk
test file

java 正则表达式 替换字符串img标签的路径_正则表达式和有限自动机的应用相关推荐

  1. java 正则表达式 替换字符串img标签的路径_python面试题汇总第06期-正则表达式(内附7题及答案)...

    1.python正则表达式中匹配(match)和查找(search)的区别 答:正则表达式中match和search的方法比较相似 相同点:都是在一个字符串s中寻找pat子字符串,如果能找到,就返回一 ...

  2. java如何使用正则表达式替换所有前端标签

    Java使用正则表达式替换所有前端标签的方法如下: 首先,要使用正则表达式替换字符串,需要使用Java的java.util.regex包. 然后,需要创建一个Pattern对象,该对象表示要匹配的正则 ...

  3. 替换html标签内容正则表达式,正则表达式,替换所有HTML标签的简单实例

    我自己写了一个正则表达式, 这个是替换所以HTML标签,非贪婪的,多行的. 如果我想替换得到所以非HTML标签, 我的代码就只能是这样,先找打HTML标签,然后将标签替换掉. 能不能直接找到非HTML ...

  4. Java中替换字符串的方法

    Java中替换字符串可以用replace和replaceAll这两种,区别是, 1. replace的参数是char和CharSequence,即可以支持字符的替换,也支持字符串的替换(CharSeq ...

  5. EditPlus正则表达式替换字符串详解

    EditPlus正则表达式替换字符串详解 发布时间:April 8, 2007 分类:Regular <PHP 实现多服务器共享 SESSION 数据> <利用javascript在 ...

  6. java 通过正则表达式替换字符串中部分内容

    最近开发遇到个需求,需要使用正则来替换字符串中间的一部分内容,也是面向百度探索了一番,之前还没怎么在实际中用过正则_,这里记录一下. 话不多说,直接上代码(解释在后面): public static ...

  7. vim替换字符串带斜杠_Vim:正则表达式匹配一个字符串

    到目前为止,所有给出的答案对我来说都是错误的,因为它们执行的是贪婪匹配.在多次出现"否"的行中,它们将匹配最后一个: YES YES YES YES no YES YES no Y ...

  8. java正则表达式替换指定字符串_笔记_正则表达式替换字符串中特定范围内的字符。...

    功能:从字符串中找到所有<>之间的单引号,转换成双引号. 如: 转换成: 代码: package test_java; import java.util.regex.Matcher; im ...

  9. 在sql server中用正则表达式替换html标签,SQL Server中利用正则表达式替换字符串

    建立正则替换函数,利用了OLE对象,以下是函数代码: --如果存在则删除原有函数 IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION ...

最新文章

  1. 英语很差,可能不会阻止你成为一名程序员,但一定会限制你成为一名“优秀的”程序员...
  2. R语言:生成正态分布数据生成--rnorm,dnorm,pnorm,qnorm
  3. Leaflet中使用awesome-markers插件显示带图标的marker
  4. real210开发板tslib1.4移植
  5. error: Refusing toundefine while domain managed save image exists
  6. Java GregorianCalendar setTimeZone()方法与示例
  7. Java SecurityManager getThreadGroup()方法与示例
  8. python类和对象介绍_Python开发基础-Day17面向对象编程介绍、类和对象
  9. zc706开发板的linux移植,Zynq—Linux移植学习笔记(十)
  10. linux命令行下全路径显示,显示命令及文件路径用什么命令?Linux命令知识有什么...
  11. 一个真正的智慧办公室,背后都有哪些黑科技?
  12. 十、Python-模块
  13. 并操作、差操作、广义积操作
  14. 前端之CSS第二部分属性相关
  15. MySQL 批量插入,如何不插入重复数据?
  16. ppt图片文字嵌入_形状,文字填充图片教你做出好看的PPT
  17. 苹果手机上编辑html文件夹,苹果手机可以编辑EXCEL文件吗
  18. 写了四十篇办公自动化文章后,我整理了这十个常用操作,代码拿走就用!
  19. 智慧城市一卡通如何开通
  20. 全球最昂贵的10大科技产品

热门文章

  1. process launch failed: Security
  2. 安卓如何修改华强北二代耳机敲击指令?
  3. 集群部署中解决定时任务重复执行的问题-redis分布式锁应用
  4. Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126
  5. 离线部署CDH5.16.1及各种坑
  6. 实验6 实践课程中的程序
  7. 创业冲突的五种解决方法是_失眠原因不同,中医五种调理方法解决问题!
  8. 云开发新能力,支持 HTTP 调用 API
  9. 2018-2019-2-20175225 实验四《Android开发基础》实验报告
  10. 自制操作系统Antz -- 系列文章