
正则表达式(1)---语法说明
正则表达式(2)---匹配规则
正则表达式(3)---运算符优先级
正则表达式(4)----常用的正则表达式
由于工作和业务原因,我接触了在不确定的文本中查找指定字符的标准. 在使用Java无效并且百度失败之后,我决定自己编写正则表达式. 最后,他被殴打得很厉害. 为了找回脸,他弥补了正则表达式. 在查阅了相关材料并查看了Daniel在Github上编写的一些正则表达式之后,我终于学到了一些东西. 乐于分享,记录下整个学习过程并与Zhujun分享.
附上我干儿子的照片(男孩越来越圆了)

你爱我的叔叔阿姨吗
正则表达式的“祖先”可以追溯到有关人类神经系统如何工作的早期研究. 两位神经生理学家Warren McCulloch和Walter Pitts开发了一种描述这些神经网络的数学方法.
1956年,基于McCulloch和Pitts的早期工作,数学家Stephen Kleene发表了一篇题为“神经网络事件的表示”的论文,其中介绍了正则表达式的概念. 正则表达式用于描述他所谓的“正则集代数”,因此使用了“正则表达式”一词.
后来,人们发现这项工作可以用于使用Ken Thompson的计算搜索算法的一些早期研究中,Ken Thompson是Unix的主要发明者. 正则表达式的第一个实际应用是Unix中的qed编辑器.
正如他们所说,其余的都是众所周知的历史. 从那时起,正则表达式已成为基于文本的编辑器和搜索工具的重要组成部分.
目前,正则表达式已在许多软件中广泛使用,包括* nix(Linux,Unix等),HP和其他操作系统,PHP,C#,Java和其他开发环境以及许多应用程序,可以看到正则表达式的阴影. 但是,由于房东使用JAVA,因此这里的重点是为了理解JAVA(其他语言也是如此,正则表达式可以普遍使用)
最后,我们结束了礼貌的用语并开始输入主题. 首先,我们学习正则表达式的语法. 这里我们以房东遇到的问题为例. 这个需求是
从HTML文件中找到标题和图片并显示.
让我们少说话,先发布HTML文档.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>干儿子</title>
</head>
<body>
<img src="https://upload-images.jianshu.io/upload_images/2326194-ece9cfbfd1fa569a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240">
<p>干儿子的照片</p>
</body>
</html>
这里的人觉得这很有趣,只需直接检查标题和img. 但是,在一个非常复杂的HTML界面中,用JAVA检查标题和img是不够的,甚至某些文本也会带来title和img,这将产生很大的影响.
以下内容对于初学者来说有点困难,无需记住它,以下各章将进行相应的说明,并且有一个图片.
正则表达式是由普通字符(例如字符a至z)和特殊字符(称为“元字符”)组成的文本模式. 该模式描述了一个或多个在搜索文本时要匹配的字符串. 正则表达式用作将字符模式与搜索到的字符串匹配的模板. 由于元字符后面会有详细的解释,因此我们在这里不再赘述.
普通字符包括所有未明确指定为元字符的可打印和不可打印字符. 其中包括所有大写A〜Z和小写字母a〜z,所有数字0〜9,所有标点符号和一些其他符号.
不可打印字符也可以是正则表达式的一部分. 下表列出了非打印字符的转义序列:
字符描述
匹配x指示的控制字符. 例如,\ cM匹配Control-M或回车符. x的值必须是A-Z或a-z中的一个. 否则,将c视为文字“ c”字符. (不常用)

匹配换页. 等效于\ x0c和\ cL.
匹配换行符. 等效于\ x0a和\ cJ.
匹配回车符. 等效于\ x0d和\ cM.
匹配任何空白字符,包括空格,制表符,换页符等. 等效于[\ f \ n \ r \ t \ v].
匹配所有非空白字符. 等效于[^ \ f \ n \ r \ t \ v].
匹配一个制表符. 等效于\ x09和\ cI.
匹配垂直标签. 等效于\ x0b和\ cK.
您无需花时间记住,只需使用几次.
所谓的特殊字符是指具有特殊含义的字符. 例如,*代表所有字符. 如果要搜索,则需要用\ *表示.
许多元字符在尝试匹配它们时需要特殊对待. 要匹配这些特殊字符,您必须首先“转义”这些字符,即在其前面加上反斜杠字符(\). 下表列出了正则表达式中的特殊字符:
特殊字符描述
匹配输入字符串的结束位置. 如果设置了RegExp对象的Multiline属性,则
字符本身,使用$.
标记子表达式的开始和结束. 可以获取子表达式以备后用. 要匹配这些字符,请使用(和).
匹配前面的子表达式零次或多次. 要匹配*字符,请使用*.
匹配前面的子表达式一次或多次. 要匹配+字符,请使用+.
匹配换行符\ n以外的任何单个字符. 要匹配,请使用\.
标记方括号表达式的开头. 要匹配[,请使用\ [.
匹配前一个子表达式零次或一次,或指定一个非贪婪的限定词. 要匹配吗?字符,请使用\?.
将下一个字符标记为特殊字符,文字字符或反引号或八进制转义字符. 例如,“ n”与字符“ n”匹配. '\ n'匹配换行符. 序列'\\'匹配“ \”,而'\('匹配“(”.
匹配输入字符串的开头,除非用于方括号表达式中,否则表示不接受字符集. 要匹配^字符本身,请使用\ ^.
标记限定符表达式的开头. 要匹配{,请使用\ {.
指定两个项目之间的选择. 要匹配|,请使用\ |.

The
限定符用于指定正则表达式的给定组件必须出现多少次匹配. 有6种类型,包括*或+或?或{n}或{n,}或{n,m}.
正则表达式限定词为:
字符描述
匹配前面的子表达式零次或多次. 例如,zo *可以匹配“ z”和“ zoo”. *相当于{0,}.
匹配前面的子表达式一次或多次. 例如,“ zo +”可以匹配“ zo”和“ zoo”,但不能匹配“ z”. +等同于{1,}.
匹配前一个子表达式零次或一次. 例如,“做(es)?”可以在“ do”或“ does”中匹配“ do”. ?等效于{0,1}.
n是一个非负整数. 确定匹配n次. 例如,“ o {2}”不能与“鲍勃”中的“ o”匹配,但可以与“食物”中的两个o匹配.
n是一个非负整数. 至少匹配n次. 例如,“ o {2,}”不能与“ Bob”中的“ o”匹配,但可以与“ foooood”中的所有o匹配. 'o {1,}'等同于'o +'. 'o {0,}'等同于'o *'.
{n,m}
m和n是非负整数,其中n <= m. 至少匹配n次,最多匹配m次. 例如,“ o {1,3}”将与“ fooooood”中的前三个o匹配. 'o {0,1}'等同于'o?'. 请注意,逗号和两个数字之间不能有空格.
使用定位器可以将正则表达式固定到行的开头或结尾. 它们还使您能够创建出现在单词中,单词开头或单词结尾的正则表达式.
The
定位符用于描述字符串或单词的边界,^和$表示字符串的开头和结尾,\ b描述单词的前边界或后边界,\ B表示非单词边界
正则表达式限定词为:
字符描述
匹配输入字符串的开头. 如果设置了RegExp对象的Multiline属性,则^也将匹配\ n或\ r之后的位置.
匹配输入字符串的结尾. 如果设置了RegExp对象的Multiline属性,则$也将匹配\ n或\ r之前的位置.
匹配单词边界,即单词和空格之间的位置.
非单词边界匹配.
注意: 不能将限定符与锚点一起使用. 由于在换行符或单词边界之前或之后不能有一个以上的位置,因此不允许使用诸如^ *之类的表达式.
字符描述
将下一个字符标记为特殊字符,文字字符,后向引用或八进制转义字符. 例如,“ n”与字符“ n”匹配. '\ n'匹配换行符. 序列'\'匹配“”,“(”匹配“(”.
匹配输入字符串的开头. 如果设置了RegExp对象的Multiline属性正则表达式语法/,则^也将匹配'\ n'或'\ r'之后的位置.

匹配输入字符串的结束位置. 如果设置了RegExp对象的Multiline属性,则$也将匹配'\ n'或'\ r'之前的位置.
匹配前面的子表达式零次或多次. 例如,zo *可以匹配“ z”和“ zoo”. *相当于{0,}.
匹配前面的子表达式一次或多次. 例如,“ zo +”可以匹配“ zo”和“ zoo”,但不能匹配“ z”. +等同于{1,}.
匹配前一个子表达式零次或一次. 例如,“做(es)?”可以在“ do”或“ does”中匹配“ do”. ?等效于{0,1}.
n是一个非负整数. 确定匹配n次. 例如,“ o {2}”不能与“鲍勃”中的“ o”匹配,但可以与“食物”中的两个o匹配.
n是一个非负整数. 至少匹配n次. 例如,“ o {2,}”不能与“ Bob”中的“ o”匹配,但可以与“ foooood”中的所有o匹配. 'o {1,}'等同于'o +'. 'o {0,}'等同于'o *'.
{n,m}
m和n是非负整数,其中n <= m. 至少匹配n次,最多匹配m次. 例如,“ o {1,3}”将与“ fooooood”中的前三个o匹配. 'o {0,1}'等同于'o?'. 请注意,逗号和两个数字之间不能有空格.
当字符紧跟任何其他限定符(*,+,?,{n},{n,},{n,m})时,匹配模式为非贪婪. 非贪婪模式尽可能少地匹配搜索到的字符串,而默认贪婪模式则尽可能地匹配搜索到的字符串. 例如,对于字符串“ oooo”,“ o +?”将匹配单个“ o”,而“ o +”将匹配所有“ o”.
匹配除“ \ n”以外的任何单个字符. 要匹配包括'\ n'在内的任何字符,请使用'[. \ N]'.
(模式)
匹配模式并获得此匹配. 可以从生成的Matches集合中获得获得的匹配项,SubMatches集合用于VBScript中,而在JScript中使用
9个属性. 要匹配括号字符,请使用'('或')'.
(?:模式)
匹配模式,但没有获得匹配结果,这意味着这是一个没有得到的匹配,不会被存储以备后用. 当使用“或”字符(|)组合模式的各个部分时,这很有用. 例如,“ indust(?: Y | ies)比“ industrial”更简单. 行业.
(?=模式)
正向查找,在与pattern匹配的任何字符串的开头匹配搜索字符串. 这是非获取性匹配,这意味着无需获取匹配以供以后使用. 例如,“ Windows(?= 95 | 98 | NT | 2000)”可以匹配“ Windows 2000”中的“ Windows”,但不能匹配“ Windows 3.1”中的“ Windows”. 预检查不占用字符,也就是说,在匹配发生后,对下一个匹配的搜索将在最后一次匹配之后立即开始,而不是在包含预检查的字符之后开始.
(?!模式)
否定预览,在与模式不匹配的任何字符串的开头匹配搜索字符串. 这是非获取性匹配,这意味着无需获取匹配以供以后使用. 例如,“ Windows(?!95 | 98 | NT | 2000)”可以匹配“ Windows 3.1”中的“ Windows”,但不能匹配“ Windows 2000”中的“ Windows”. 预检查不占用字符,也就是说,在匹配发生后,对下一个匹配的搜索将在最后一次匹配之后立即开始,而不是在包含预检查的字符之后开始.
匹配x或y. 例如,'z |食物”可以匹配“ z”或“食物”. '(z | f)ood'匹配“ zood”或“ food”.
[xyz]
字符集. 匹配包含的任何字符. 例如,“ [abc]”可以匹配“普通”中的“ a”.
[^ xyz]

负字符集. 匹配任何不包含的字符. 例如正则表达式语法/,“ [^ abc]”可以匹配“普通”中的“ p”.
[a-z]
字符范围. 匹配指定范围内的任何字符. 例如,“ [a-z]”可以匹配“ a”到“ z”范围内的任何小写字母.
[^ a-z]
负字符范围. 匹配不在指定范围内的任何字符. 例如,“ [^ a-z]”可以匹配不在“ a”到“ z”范围内的任何字符.
匹配单词边界,即单词和空格之间的位置. 例如,“ er \ b”可以与“从不”中的“ er”匹配,而不能与“动词”中的“ er”匹配.
匹配非单词边界. “ er \ B”可以与“动词”中的“ er”匹配,但不能与“从不”中的“ er”匹配.
匹配x指示的控制字符. 例如,\ cM匹配Control-M或回车符. x的值必须是A-Z或a-z中的一个. 否则,将c视为原义的“ c”字符.
匹配数字字符. 相当于[0-9].
匹配一个非数字字符. 等效于[^ 0-9].
匹配换页. 等效于\ x0c和\ cL.
匹配换行符. 等效于\ x0a和\ cJ.
匹配回车符. 等效于\ x0d和\ cM.
匹配任何空白字符,包括空格,制表符,换页符等. 等效于[\ f \ n \ r \ t \ v].
匹配所有非空白字符. 等效于[^ \ f \ n \ r \ t \ v].
匹配一个制表符. 等效于\ x09和\ cI.
匹配垂直标签. 等效于\ x0b和\ cK.
匹配任何单词字符,包括下划线. 等同于“ [A-Za-z0-9 _]”.
匹配所有非单词字符. 等效于“ [^ A-Za-z0-9 _]”.
匹配n,其中n是十六进制转义值. 十六进制转义值必须为两位数. 例如,“ \ x41”匹配“ A”. '\ x041'等效于'\ x04'和“ 1”. 您可以在正则表达式中使用ASCII编码.
匹配num,其中num是一个正整数. 对获得的匹配的引用. 例如,'(. )\ 1'匹配两个连续的相同字符.
标识八进制转义值或向后引用. 如果在\ n之前至少有n个子表达式,则n是向后引用. 否则,如果n是八进制数字(0-7),则n是八进制转义值.
标识八进制转义值或向后引用. 如果\ nm之前至少有nm子例程,则nm是向后引用. 如果在\ nm之前至少有n个采集,则n是向后引用,后跟文本m. 如果不满足上述条件,则如果n和m均为八进制数字(0-7),\ nm将匹配八进制转义值nm.
如果n是八进制数字(0-3),并且m和l都是八进制数字(0-7),则匹配八进制转义值nml.
匹配n,其中n是由四个十六进制数字表示的Unicode字符. 例如,\ u00A9与版权符号(?)相匹配.
然后回到最初的问题,我们需要检查标题和img相关数据,然后让我们首先分析功能需求.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-221398-1.html
战前北洋水师已经十年没有更新舰艇了