目录:
- 1、正则表达式如何匹配多行的所有任意字符
- 2、正则表达式工具介绍 它有什么功能
- 3、有生成正则表达式的工具吗?
- 4、看完就懂系列之正则表达式(值得收藏)
- 5、正则(?=.*[a-z])是啥意思?
正则表达式如何匹配多行的所有任意字符
如何使用正则表达式来获取一段文本中的任意字符包括换行符“n”呢?
匹配方法可以使用 ([sS]*) 或 ([dD]+) 或 ([wW]*)
其中*表示重复零次或更多次,+表示重复一次或更多次。
可以使用正则表达式在线测试工具验证,如下图:
正则表达式常用字符释义如下表:
正则表达式工具介绍 它有什么功能
1、正则表达式工具 Match Tracer 是一款用来编写和测试正则表达式的工具软件。本软件通过可视化的界面,可以协助你快速、正确地写出复杂的正则表达式。
2、主要功能:根据正则表达式语法,彩色显示表达式,使表达式便于阅读。
3、同步将正则表达式的组成显示在 树结构 和 分组列表 中,使正则表达式结构一目了然。
4、详细记录每一个匹配结果,包含分组结果以及所花费的时间。
5、可进行忽略大小写,单行模式,多行模式,全局模式,从左右,扩展模式等模式下的正则表达式测试。
6、可单独测试表达式中的一部分,有利于分段调试复杂的正则表达式。
7、您可以设置一个匹配起始点,方便排查表达式错误。
8、支持高级正则语法,例如递归匹配等。
9、可以保存文本片段,例如表达式或者其他文本,也可以跟任意其他编辑器之前相互拖动。
10、可以保存当前表达式为一个‘快照’,使您可以放心改写表达式。
有生成正则表达式的工具吗?
正则表达式可以让开放人员更加有效的操纵文本内容,在各种各样的开发中经常会遇到需要正则表达式解决的问题,比如验证邮箱,验证网址,一些小偷程序的批量替换等等。熟练的应用正则表达式可以方便于很多文本的操作,加快开发的进度。 但是正则表达式并不是一个非常简单的东西,很多时候在应用的过程中会出现一些逻辑或者非逻辑上的错误和疏漏,那么我们正式需要一些工具来辅助我们验证正则表达式的正确性。1、txt2re (如果你不会写正则,用它可以生成你想要的正则表达式)。txt2re是一款在在线生成正则表达式的工具,你要输入你想匹配的文字,他就会将这些文字拆分到那些色块里面,然后你要进行相应的选择,其中c表示任意字符,int表示整数,year表示年等等。2、The Regulator 是其中的佼佼者。The Regulator窗口主要分为六部分:Web Search、Regex Analyzer、SnippetsControl、表达式输入区、Match结果区、待解析文本区。比较重要的是Regex Analyzer、表达式输入区、Match结果区、待解析文本区。在默认情况下,Web Search区占了很大位置,可能需要调整一下。3、在线测正则表达式。在线测正则表达式国内的正则表达式在线工具,界面简单,在这个页面的下面还有各式各样的正则表达式参考大全,和这则表达式实例库的链接。4、在线正则表达式工具。在线正则表达式工具是国内另一个原创的正则表达式工具,实现了文本匹配,和替换等功能,界面简单实用,由于是中文的,所以很容易明白使用方法。在这里推荐大家学习一下人工编写,书籍的话推荐:《正则表达式教程chm完整版》是一本详细介绍了正则表达式的电子书教程,全书共分为8个小节,详细的讲述了正则表达式的定义,各种操作符的运算优先级,全部符号解释,正则表达式匹配规则,参考文献以及相关实例等,全书简明扼要,能够很好的帮助读者们正确掌握学习好正则表达式,从而在软件编程中得到更好发挥。有生成正则表达式的工具吗?
看完就懂系列之正则表达式(值得收藏)
正则表达式是很多程序员,甚至是一些有了多年经验的开发者薄弱的一项技能。大家都很多时候都会觉得正则表达式难记、难学、难用,但不可否认的是正则表达式是一项很重要的技能,所有我将学习和使用正则表达式时的关键点整理如下,供大家参考。
正则表达式(Regular Expression 或 Regex),是用于定义某种特定搜索模式的字符组合。正则表达式可用于匹配、查找和替换文本中的字符,进行输入数据的验证,查找英文单词的拼写错误等。
调试工具
下面列出了几款优秀的在线调试工具,如果你想创建或者调试正则表达式可能会需要。个人比较偏好Regex101,regex101 支持在正则表达式的不同 flavor 之间切换、解释你的正则表达式、显示匹配信息、提供常用语法参考等功能,非常强大。
Regex101
Regexr
Regexpal
在 Javascript 中,一个正则表达式以 / 开头和结尾,所以简单至 /hello regexp/ 就是一个正则表达式。
Flags(标志符或修饰符)
Flags 写在结束的/之后,可以影响整个正则表达式的匹配行为。常见的 flags 有:
Flags 可以组合使用,如:
Character Sets(字符集合)
用于匹配字符集合中的任意一个字符,常见的字符集有:
比如匹配所有的字母和数字可以写成:/[a-zA-Z0-9]/ 或者 /[a-z0-9]/i。
Quantifiers (量词)
在实际使用中,我们常常需要匹配同一类型的字符多次,比如匹配 11 位的手机号,我们不可能将 [0-9] 写 11 遍,此时我们可以使用 Quantifiers 来实现重复匹配。
Metacharacters(元字符)
在正则表达式中有一些具有特殊含义的字母,被称为元字符,简言之,元字符就是描述字符的字符,它用于对字符表达式的内容、转换及各种操作信息进行描述。
常见的元字符有:
Special Characters (特殊字符)
正则中存在一些特殊字符,它们不会按照字面意思进行匹配,而有特殊的意义,比如前文讲过用于量词的?、*、+。其他常见的特殊字符有:
Groups(分组)
Assertion(断言)
最后,推荐大家使用Fundebug,一款很好用的 BUG 监控工具~
上面罗列出了这么多正则表达式的语法和规则,可以在一定程度上帮助我们分析和理解一段正则表达式的作用,但是如何将这些规则组合并创造出有特定作用的表达式还需要我们自己多加练习,下面举几个例子来说明运用这些规则。
1. 匹配手机号码
我们先从比较简单的匹配手机号码开始。目前国内的手机号码是1(3/4/5/7/8)开头的 11 位数字,因此手机号码的正则可以分解为以下几部分:
组合起来即为 /^1[34578]d{9}$/ 或 /^1(3|4|5|7|8)d{9}$/,因为使用捕获括号存在性能损失,所以推荐使用第一种写法。
2. 匹配电子邮件
标准的电子邮件组成为 yourname@domain.extensionoptional-extension,
每部分的格式标准为(进行了相应的简化,主要为展示如何书写正则):
每部分的正则表达式为:
组合起来形成最后的正则表达式:/^([a-zd._-]+)@([a-zd-]+).([a-z]{2,8})(.[a-z]{2,8})?$/;为了增加可读性可以将每部分用"()"包起来,并不要忘记起始和结束符 ^$。
正则(?=.*[a-z])是啥意思?
.代表任意字符,(?=.*[a-z]) 表示任意字符拼接小写字母,那(?=[a-z])跟它有什么区别?
首先 (?=xxx) 是 look ahead=你说的 前瞻
此处xxx的区别:
.*[a-z]:任意字符,且个数尽量多,后跟单个小写字母
举例:12AB3c4d
[a-z]:单个小写字母
举例:12AB3c4d 只能匹配到:12AB3c
12AB3是前面部分
c是最后的[a-z]匹配的
-》其实,更准确的解释需要你给出完整的正则,而不仅仅是look ahead的部分,才能详细和精确解释匹配的内容和逻辑。
前瞻:exp1(?=exp2) 查找exp2前面的exp1,
后顾:(?=exp2)exp1 查找exp2后面的exp1,
(?=.*[a-z]). 和 .(?=.*[a-z]) 我测试都能运行,反而(?=.*[a-z]). 运行不了,是不是后顾表达式不能用 (?=exp2)exp1 了?
不是。而是:
look behind=后顾 有个特殊的情况:只支持固定长度,比如123,而不支持不定长度的,比如d+
你的 (?=.*[a-z]). 中的 .*[a-z] ,属于正则写法,能匹配到不固定长度的字符,所以不支持,会报错的。
官网解释,详见python中的re
re --- 正则表达式操作 — Python 3.8.1 文档
(?=…)
匹配字符串的当前位置,它的前面匹配 … 的内容到当前位置。这叫:dfn:positive lookbehind assertion(正向后视断定)。 (?=abc)def 会在 'abcdef' 中找到一个匹配,因为后视会往后看3个字符并检查是否包含匹配的样式。包含的匹配样式必须是定长的,意思就是 abc 或 a|b 是允许的,但是 a* 和 a{3,4} 不可以。
注意其中的“包含的匹配样式必须是定长的”
用菜鸟工具正则表达式在线测试,abcD去匹配 (?=.*[a-z]). 匹配结果是 a b c,为什么a也能匹配,a的前面什么都没有啊!
建议换用更好用的
RegExr: Learn, Build, Test RegEx
解释:
因为 你写的 (?=.*[a-z]).,其中的 .*[a-z] 含义是:任意字符,个数0或多个,后面跟着一个小写字母
而此处 之所以能匹配到a,是因为a前面有个 ^ 也叫 行首 =每个行的开始
对于正则来说,也是一个 不可见的特殊的字符。
更多正则的解释,详见我的教程:
应用广泛的超强搜索:正则表达式
顺带送上我刚整理的:
正则逻辑说明:look ahead和look behind
如图: