正则表达式匹配单词细节解析

开发 后端
正则表达式匹配单词是如何实现的呢,这里我们向你介绍了一个详细的实施办法以及实现的原理分析,希望对你了解正则表达式匹配单词有所帮助。

正则表达式匹配单词其实就是要处理单词的边界问题,那么具体的实现是如何呢?正则表达式匹配单词所涉及的方法以及原理是什么呢?那么让我们开始吧

正则表达式匹配单词的内幕:

元字符<<\b>>也是一种对位置进行匹配的“锚”。这种匹配是0长度匹配。有4种位置被认为是“单词边界”:

1)在字符串的***个字符前的位置(如果字符串的***个字符是一个“单词字符”)

2)在字符串的***一个字符后的位置(如果字符串的***一个字符是一个“单词字符”)

3)在一个“单词字符”和“非单词字符”之间,其中“非单词字符”紧跟在“单词字符”之后

4)在一个“非单词字符”和“单词字符”之间,其中“单词字符”紧跟在“非单词字符”后面

 “单词字符”是可以用“\w”匹配的字符,“非单词字符”是可以用“\W”匹配的字符。在大多数的正则表达式实现中,“单词字符”通常包括<<[a-zA-Z0-9_]>>。

例如:<<\b4\b>>能够匹配单个的4而不是一个更大数的一部分。这个正则表达式不会匹配“44”中的4。

换种说法,几乎可以说<<\b>>匹配一个“字母数字序列”的开始和结束的位置。

“单词边界”的取反集为<<\B>>,他要匹配的位置是两个“单词字符”之间或者两个“非单词字符”之间的位置。

正则表达式匹配单词的原理探讨:

◆深入正则表达式引擎内部

让我们看看把正则表达式<<\bis\b>>应用到字符串“This island is beautiful”。引擎先处理符号<<\b>>。因为\b是0长度 ,所以***个字符T前面的位置会被考察。因为T是一个“单词字符”,而它前面的字符是一个空字符(void),所以\b匹配了单词边界。接着<<i>>和***个字符“T”匹配失败。匹配过程继续进行,直到第五个空格符,和第四个字符“s”之间又匹配了<<\b>>。然而空格符和<<i>>不匹配。继续向后,到了第六个字符“i”,和第五个空格字符之间匹配了<<\b>>,然后<<is>>和第六、第七个字符都匹配了。然而第八个字符和第二个“单词边界”不匹配,所以匹配又失败了。到了第13个字符i,因为和前面一个空格符形成“单词边界”,同时<<is>>和“is”匹配。引擎接着尝试匹配第二个<<\b>>。因为第15个空格符和“s”形成单词边界,所以匹配成功。引擎“急着”返回成功匹配的结果。

【编辑推荐】

  1. 正则表达式字符集探究
  2. ?*或+正则表达式使用详解
  3. 实现正则表达式匹配任意字符解析
  4. 浅析正则表达式实现字符串的相关操作
  5. Java正则表达式实现条件查询浅析
责任编辑:仲衡 来源: 百度空间
相关推荐

2009-09-16 16:48:03

正则表达式匹配数字

2009-08-20 16:13:32

C#正则表达式匹配

2009-09-16 16:22:04

正则表达式匹配

2009-09-16 17:38:49

正则表达式匹配任意字符

2010-08-09 13:58:59

Flex正则表达式

2010-07-13 17:03:53

Perl正则表达式

2010-07-28 11:06:41

Flex正则表达式

2010-07-14 09:37:46

Perl正则表达式

2011-06-16 15:28:31

正则表达式

2010-03-15 16:21:28

Python正则表达式

2010-03-04 15:20:20

Ubuntu Patt

2009-09-16 13:24:30

PHP正则表达式匹配

2021-12-03 08:50:25

LeetCode正则表达式算法

2018-09-27 15:25:08

正则表达式前端

2009-09-16 10:59:24

PHP正则表达式元字符

2020-09-04 09:16:04

Python正则表达式虚拟机

2009-09-16 13:53:17

PHP正则表达式匹配

2010-07-21 10:43:25

Perl正则表达式匹配

2009-06-10 13:51:25

Java正则表达式匹配替换

2010-03-10 18:57:53

Python正则表达式
点赞
收藏

51CTO技术栈公众号