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

注:在所有例子中正则表达式匹配结果包含在源文本中的【和】之间,有的例子会使用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.

正则表达式:\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文档都以<?xml …..?>这样形式开头:

文本:

正则表达式:^\s*

结果:

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

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

java正则表达式匹配路径_正则表达式教程之位置匹配详解相关推荐

  1. java g1的并行_「g1」JVM G1详解 - seo实验室

    g1 当我们调优java程序时,通常的目标有两个: 响应能力 或者 吞吐量 响应能力 响应能力指一个程序或者系统对请求的是否能够及时响应. 比如: 一个桌面UI能多快的响应一个事件: 一个网站能够多快 ...

  2. 我的世界Java版最大村庄_我的世界19w11a:详解MC全新村庄机制,我已经准备好重开存档了!...

    已经两周没见到JAVA版的快照了,难道Mojang在憋大招么?没错,本周快照19w11a确实是憋了一个大招! 我的世界19w11a:正式版发布不远了!村庄大改完成,全新交易来袭我的世界19w11a:详 ...

  3. java 二叉树的高度_最全二叉树:完整详解二叉树的遍历以及完全二叉树等6种二叉树...

    树在数据结构中占据了非常重要的位置,尤其是二叉树.经常是在java面试中必问的一个环节,而且二叉树的应用场景真的非常普遍,需要重点掌握好. 但是一直以来,很多同学对于二叉树的掌握都是不太全面.今天我就 ...

  4. java controller注解原理_@Controller、@RestController注解区别详解

    @Controller.@RestController注解区别: @RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用. 一.@Contr ...

  5. java死信队列_Spring Boot系列教程之死信队列详解

    前言 在说死信队列之前,我们先介绍下为什么需要用死信队列. 如果想直接了解死信对接,直接跳入下文的"死信队列"部分即可. ack机制和requeue-rejected属性 在项目s ...

  6. 我的世界java版记分板_我的世界计分板教程 计分板指令详解

    我的世界计分板教程 计分板指令详解.啊下面就给大家详细的介绍一下我的世界中的计分板吧!计分板的指令主要是objectives.players.teams.那下面就将这三个指令教程详细的分享一下吧!希望 ...

  7. eval 函数 java_[Java教程]eval()函数用法详解

    [Java教程]eval()函数用法详解 0 2015-12-14 11:00:26 eval()函数用法详解: 此函数可能使用的频率并不是太高,但是在某些情况下具有很大的作用,下面就介绍一下eval ...

  8. AndroidManifest.xml文件配置教程及相关指令详解

    AndroidManifest.xml 是每个android程序中必须的文件,它位于整个项目的根目录.我们每天都在使用这个文件,往里面配置程序运行所必要的组件,权限,以及一些相关信息.但是对于这个文件 ...

  9. Nmap扫描教程之基础扫描详解

    Nmap扫描教程之基础扫描详解 Nmap扫描基础扫描 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以分别对主机.端口.版本.操作系统等实施扫描.但是,在 ...

最新文章

  1. c# applibrary实现一个Sheet表中存放多张DataTable数据
  2. 成为百万富翁的25种方法
  3. java web 中的乱码
  4. 用ghost备份和还原Linux系统(一)
  5. beamer插入图片_利用Pandoc将Markdown转化为beamer(七)Pandoc的命令行参数
  6. 一起寻找哪些免费小巧的 CAD文件查看和格式转换软件
  7. 单个圆孔菲涅耳衍射的matlab模拟,矩孔和圆孔菲涅耳衍射的计算机模拟
  8. 第十一章 Caché 函数大全 $DATA 函数
  9. 「运维之美」技术周刊 ( 第 2 期 )
  10. C语言实现英寸单位与厘米的转换(两种方法)特简单!!!
  11. 再见!Notepad++
  12. 从西天取经的九九八十一难来看Java设计模式:模板方法模式
  13. FFmpeg音频解码-音频可视化
  14. 618终极剁手攻略,收割全套数据分析师课程!
  15. PyQt5安装失败总结
  16. SAP小技巧之 标签打印
  17. 重学计算机网络(二) - 曾记否,查IP地址
  18. 平衡面板数据中的缺失值可以存在吗?
  19. myeclipse下载git插件
  20. 微软控诉四大PC品牌经销商

热门文章

  1. 北京公积金账户可自动转化还房贷
  2. nohup command/dev/null 21 是什么意思?
  3. DM368开发 -- uboot、内核移植(转)
  4. 《食品真相大揭秘》和《中国食品安全现状调查》
  5. k近邻算法_【机器学习】K近邻算法(KNN)
  6. 数据标签使用技法与重要问题
  7. 开源网zhuan博客系统+支付功能+会员系统
  8. 人手一个 Midjourney,StableStudio 重磅开源!
  9. 无线接收器能连服务器吗,自制无线接收器 你会设置无线接收器吗?
  10. micropython stm32f405_STM32F405RGT6核心板兼MicroPython开发板的电路方案设计(原理图+完整工程)...