0

0

正则表达式教程之位置匹配详解

高洛峰

高洛峰

发布时间:2017-01-09 16:45:22

|

2226人浏览过

|

来源于php中文网

原创

本文实例讲述了正则表达式教程之位置匹配。分享给大家供大家参考,具体如下:

注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用Java来实现,如果是java本身正则表达式的用法,会在相应的地方说明。所有java例子都在JDK1.6.0_13下测试通过。

一、问题引入

如果想匹配一段文本中的某个单词(暂不考虑多行模式,将在后面介绍),我们可能会像下面这样:

文本:Yesterday is history, tomorrow is a mystery, but today is a gift.

正则表达式:is

结果:Yesterday 【is】 h【is】tory, tomorrow 【is】 a mystery, but today 【is】a gift.

分析:本来只是要匹配单词is,但把其他单词中包含的is也匹配出来了。要解决这个问题,使用边界界定符,也就是在正则表达式里用一些元字符来表明我们想让匹配操作在什么位置(或边界)发生。

二、单词边界

一种常用的边界是由限定符\b指定的单词边界,\b用来匹配单词的开始和结尾。更确切地说,它是匹配这样一个位置,这个位置位于一个能够用来构成单词的字符(字母、数字、下划线,也就是与\w相匹配的字符)和一个不能用来构成单词的字符(与\W相匹配的字符)之间。来看前面的例子:

文本:Yesterday is history, tomorrow is a mystery, but today is a gift.

正则表达式:\bis\b

结果:Yesterday 【is】 history, tomorrow 【is】 a mystery, but today 【is】 a gift.

分析:在原始文本中,单词is的前后都有一个空格,而这与模式\bis\b匹配(空格是用来分隔单词的字符之一)。而单词history中也包含了is,因为它的前后分别有一个字符h和t,这两个字符都不能与\b匹配。

如果不匹配一个单词边界,则使用\B。如:

文本:Please enter the nine-digit id as it appears on your color - coded pass-key.

秘塔AI搜索
秘塔AI搜索

秘塔AI搜索,没有广告,直达结果

下载

正则表达式:\B-\B

结果:Please enter the 【nine-digit】 id as it appears on your color - coded 【pass-key】.

分析:\B-\B将匹配一个前后都不是单词边界的连字符,nine-digit和pass-key中连字符前后都没有空格,所以能够匹配,而color - coded中连字符前后都有空格,所以不能匹配。

三、字符串边界

单词边界可以用来进行与单词有关的位置匹配(单词开头、结束、整个单词等等)。而字符串边界也有着类似的用途,只不过是用来进行与字符串有关的位置匹配(字符串开头、结束、整个字符串等等)。用来定义字符串边界的元字符有两个:一个是用来定义字符串开头的^,另一个是用来定义字符串结尾的$。

比如要检查一个XML文档的合法性,合法的XML文档都以这样形式开头:

文本:



   

正则表达式:^\s*

结果:



分析:^匹配一个字符串的开头位置,所以^\s*将匹配一个字符串的开头位置和随后的零个或多个空白字符,因为标签前面允许有空格、制表符、换行符等空白字符。

$元字符符的用法除了位置上的差异外,与^用法完全一样。比如,检查一个html页面是否以

相关专题

更多
C++ 高级模板编程与元编程
C++ 高级模板编程与元编程

本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

10

2026.01.23

php远程文件教程合集
php远程文件教程合集

本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

29

2026.01.22

PHP后端开发相关内容汇总
PHP后端开发相关内容汇总

本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

php会话教程合集
php会话教程合集

本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

21

2026.01.22

宝塔PHP8.4相关教程汇总
宝塔PHP8.4相关教程汇总

本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.22

PHP特殊符号教程合集
PHP特殊符号教程合集

本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

11

2026.01.22

PHP探针相关教程合集
PHP探针相关教程合集

本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

8

2026.01.22

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

55

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
【李炎恢】ThinkPHP8.x 后端框架课程
【李炎恢】ThinkPHP8.x 后端框架课程

共50课时 | 4.5万人学习

WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 8.5万人学习

JavaScript正则表达式基础与实战
JavaScript正则表达式基础与实战

共11课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号