正则表达式——Pattern.DOTALL

2023-11-09

        项目测试过程中,测试发现短信内容无法正常解析成2个部分。代码如下:

public static void main(String[] args) {

    String testStr = "#13800000000# '孔雀东南飞,五里一徘徊。'\n" +

            "    '十三能织素,十四学裁衣,十五弹箜篌,十六诵诗书。十七为君妇,心中常苦悲。君既为府吏,守节情不移,贱妾留空房,相见常日稀。'";

    Pattern pattern = Pattern.compile("^#(\\d+)#(.*)$");

    Matcher matcher = pattern.matcher(testStr);

    if (matcher.find()) {

        String number = matcher.group(1);

        System.out.println("phone number: " + number);

    } else {

        System.out.println("failed");

    }

}

        运行代码后,控制台输出:  failed

        经过查阅资料,发现原因是:正则表达式中 “.” 可以匹配除换行符(\n、\r)之外的任何单个字符,如果要匹配包括 '\n' 在内的任何字符,需要使用像"(.|\n)"的模式。

        修改代码如下:

public static void main(String[] args) {

    String testStr = "#13800000000# '孔雀东南飞,五里一徘徊。'\n" +

            "    '十三能织素,十四学裁衣,十五弹箜篌,十六诵诗书。十七为君妇,心中常苦悲。君既为府吏,守节情不移,贱妾留空房,相见常日稀。'";

    Pattern pattern = Pattern.compile("^#(\\d+)#(.|\\n)*$");

    Matcher matcher = pattern.matcher(testStr);

    if (matcher.find()) {

        String number = matcher.group(1);

        System.out.println("phone number: " + number);

    } else {

        System.out.println("failed");

    }

}

        运行代码后,控制台输出:phone number: 13800000000

        目前虽然可以满足需求了,能正常匹配带 “\n”的字符串,但是如果还有其他情形,如“\t”、“\r”等,则需要穷举,在表达式中补充。那有没有更好的方法呢?在查询解决方案的过程中,发现了 Pattern.DOTALL 可以更优雅地满足这次需求。

        Pattern.DOTALL 模式即 Singleline (单行模式):(?s)。表示更改 . 的含义,使它与每一个字符匹配(包括换行符 \n ),默认情况下, 正则表达式中点(.)不会匹配换行符, 设置了 Pattern.DOTALL 模式, 才会匹配所有字符包括换行符。

        代码如下:

public static void main(String[] args) {

    String testStr = "#13800000000# '孔雀东南飞,五里一徘徊。'\n" +

            "    '十三能织素,十四学裁衣,十五弹箜篌,十六诵诗书。十七为君妇,心中常苦悲。君既为府吏,守节情不移,贱妾留空房,相见常日稀。'";

    Pattern pattern = Pattern.compile("^#(\\d+)#(.*)$", Pattern.DOTALL);

    Matcher matcher = pattern.matcher(testStr);

    if (matcher.find()) {

        String number = matcher.group(1);

        System.out.println("phone number: " + number);

    } else {

        System.out.println("failed");

    }

}

        运行代码后,控制台输出:phone number: 13800000000

参考文档:正则表达式 – 元字符 | 菜鸟教程

                  正则表达式Pattern.DOTALL、(?s)、Pattern.MULTILINE、(?m)_小百菜的博客-CSDN博客_pattern.multiline

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式——Pattern.DOTALL 的相关文章

  • Keytool 应用程序在哪里?

    我需要在android中使用mapview控件 但我似乎不明白如何运行keytool 是用eclipse安装的吗 我好像找不到下载链接 Thanks keytool http docs oracle com javase 7 docs te
  • 具有更高可见性的重写方法是良好的实践吗?

    回答这个问题 如何使用 GUI 使用 PaintComponent 初始化 GUI 然后添加基于鼠标的 GUI https stackoverflow com questions 21336141 how to gui using pain
  • 清理码头 - 删除“不必要”的东西

    我习惯用Jetty http jetty codehaus org jetty 作为我的网络容器 我对我做了什么安装步骤得到原始的焦油球并且清理一些目录和文件从中 我在这里想提出的是 您通常从 Jetty 中删除什么以在生产 登台环境中使用
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 使用cameltestsupport进行Camel单元测试,模板始终为空

    我正在用 Camel 做一个简单的单元测试 我想做的就是从文件 在资源下 读取 JSON 内容 将其发送到 Java 类进行验证 这是我试图测试的路线 无论我做什么 模板 我用来发送正文 json 始终为空 这是我的代码 public cl
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • 在文本文件中搜索单词并返回其频率

    如何在包含单词文本的文本文件中搜索特定单词并返回其频率或出现次数 使用扫描仪 String text Question how to search for a particular word in a text file containin
  • 如何在 JSP 中导入类?

    我是一个完全的JSP初学者 我正在尝试使用java util List在 JSP 页面中 我需要做什么才能使用除以下类之外的类java lang 使用以下导入语句进行导入java util List 顺便说一句 要导入多个类 请使用以下格式
  • 无法在 Spring Boot 测试中模拟 persistenceContext

    我正在使用带有 Mockito 框架的 spring boot 测试来测试我的应用程序 存储库类 EntityManager 之一作为参考 我的班级如下所示 Repository Transactional Slf4j public cla
  • 记录骆驼路线

    我的项目中有几个 Camel 上下文 如果可能的话 我想以逆向工程方式记录路线 因为我们希望保持与上下文相关的文档最新 最好的方法是什么 我们倾向于预先实际设计路线 并使用来自EIP book http www eaipatterns co
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • Git 无法识别重命名和修改的包文件

    我有一个名为的java文件package old myfile java 我已经通过 git 提交了这个文件 然后我将我的包重命名为new所以我的文件在package new myfile java 我现在想将此文件重命名 和内容更改 提交
  • 计算日期之间的天数差异

    在我的代码中 日期之间的差异是错误的 因为它应该是 38 天而不是 8 天 我该如何修复 package random04diferencadata import java text ParseException import java t
  • Android Studio 将音乐文件读取为文本文件,如何恢复它?

    gameAlert mp3是我的声音文件 运行应用程序时 它询问我该文件不与任何文件类型关联 请定义关联 我选择TextFile错误地 现在我的音乐文件被读取为文本文件 我如何将其转换回music file protected void o
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 对象锁定私有类成员 - 最佳实践? (爪哇)

    I asked 类似的问题 https stackoverflow com questions 10548066 multiple object locks in java前几天 但对回复不满意 主要是因为我提供的代码存在一些人们关注的问题
  • 解决错误javax.mail.AuthenticationFailedException

    我不熟悉java中发送邮件的这个功能 我在发送电子邮件重置密码时遇到错误 希望你能给我一个解决方案 下面是我的代码 public synchronized static boolean sendMailAdvance String emai
  • Android AutoCompleteTextView 带芯片

    我不确定我是否使用了正确的词语来描述此 UI 功能 但我已附上我希望在我的应用程序中实现的目标的快照 它由 Go SMS 使用 用户在编辑文本中键入联系人 在用户从完成下拉列表中选择联系人后 该联系人将被插入到编辑文本中 如附图所示 编辑文
  • 在android中跟踪FTP上传数据?

    我有一个运行 Android 的 FTP 系统 但我希望能够在上传时跟踪字节 这样我就可以在上传过程中更新进度条 安卓可以实现这个功能吗 现在 我正在使用org apache common net ftp我正在使用的代码如下 另外 我在 A

随机推荐

  • iPhone/iPad用iTunes“同步”不等于“备份”

    一个很 基础 却很 重要 很多人 搞不清楚 解释又很花时间的问题 就是 iPhone 跟电脑 iTunes 同步 和 备份 有什么不同 首先 Sync 翻译成中文 同步 本来就是一个定义 认知有点模糊的中文动词 尤其对电脑不是很熟悉的朋友
  • Java 构造函数的详解

    我们人出生的时候 有些人一出生之后再起名字的 但是有些人一旦出生就已经起好名字的 那么我们在java里面怎么在对象一旦创建就赋值呢 1 构造方法的作用 构造方法作用 对对象进行初始化 如图 2 构造函数与普通函数的区别 1 一般函数是用于定
  • CTF工具压缩包爆破神器Fcrackzip详细用法

    Fcrackzip简介 Fcrackzip是一款专门破解zip类型压缩文件密码的工具 工具小巧方便 破解速度快 能使用字典和指定字符集破解 适用于linux mac osx 系统 Fcrackzip下载 Windows下载 下载链接 htt
  • 「爬虫教程」吐血整理,最详细的爬虫入门教程

    初识爬虫 学习爬虫之前 我们首先得了解什么是爬虫 来自于百度百科的解释 网络爬虫 又称为网页蜘蛛 网络机器人 在FOAF社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 通俗来讲 假如你需要互联网上
  • Spring中Bean的实例化详细流程

    还是举个例子 我有一个朋友小汪他远赴南方某城市打工 然后安定下来后他的朋友很想来家里玩 但是呢我这个朋友家里搞的很乱 所以他不好意思请朋友来家里玩 这时我的另一个朋友说那请一个保姆把家里好好整理一下就可以了 然后给他介绍了一个保姆大S PS
  • C语言 信号处理机制

    C语言中信号标示一种时间 它可能异步地发生 也就是并不与城市执行过程中的任何事件保持同步 如果程序中未设置该信号的处理函数 则选择缺省方式 大部分为终止程序运行 信号头文件
  • 面向对象的编程思想和Python的类,访问和属性,继承

    面向对象的编程思想和Python的类 类的方法和属性 实例方法 这一文从面相对象的角度 介绍类的定义 类的属性和自定义方法 本文将从访问限制 属性 继承 方法重写这几个方面继续介绍面向对象的编程思想和Python类的继承 一 访问权限 Py
  • XML建模

    文章目录 思路 思路 把配置文件读到内存里并解析出来 gt 建立xml模型 有几个节点就创建几个模型 把他们的关系放到模型里 gt 对模型进行完善 gt 把解析出来的数据放到模型里 XML建模的具体文件 内附注释
  • Linux unit 测试工具,单元测试工具 CUnit 简介

    1 CUnit简介 1 1 CUnit简要描述 CUnit是一个编写 管理及运行c语言单元测试的系统 它使用一个简单的框架来构建测试结构 并为普通数据结构的测试提供丰富的断言 此外 CUnit为测试的运行和结果查看提供了许多不同的接口 包括
  • centos7 keepalived 离线安装

    两台服务器 master 10 214 130 100 slave 10 214 130 101 vip keepalived虚拟ip 10 214 130 102 1 下载 登陆官网 http www keepalived org dow
  • IDEA Maven 依赖分析插件Maven Helper

    IDEA 安装Maven Helper插件 1 打开setting 找到Plugins选项 安装Maven Helper 插件 如果有就跳过这一步 检索 Maven Helper 安装成功后 重新启动IDEA编辑器 2 使用Maven He
  • java 将pdf转word

    可以使用 Apache POI 库来实现将 PDF 转换为 Word 文档的功能 首先 需要将 Apache POI 库的依赖添加到项目中
  • 推荐几个很实用的编程网站

    目录 一 W3School 二 LeetCode 三 PythonTip 四 Codewars 五 Code Monkey 本文精选了有关代码 编程 Java Python SQL Git 和Ruby on Rails学习的网站 这些网站为
  • mac扩展屏,HIDPI

    2k 4k 均可开启 HIDPI
  • java.lang.RuntimeException: Canvas: trying to draw too large(277114284bytes) bitmap.

    java lang RuntimeException Canvas trying to draw too large 277114284bytes bitmap 今天运行一个小项目报错 E AndroidRuntime FATAL EXCE
  • 【PCL】得到一个点云中的最高值、最低值

    有一个点云 想得到它x y z三个轴上的最大值和最小值 可以用pcl getMinMax3D函数 在这儿 函数参数 1 点云 2 放最小值的容器 3 放最大值的容器 容器类型是点云中点的类型 正好有三个值 代码 Created by eth
  • 分布式事务-LCN

    2PC两阶段提交协议 分布式事务通常采用2PC协议 全称Two Phase Commitment Protocol 该协议主要为了解决在分布式数据库场景下 所有节点间数据一致性的问题 分布式事务通过2PC协议将提交分成两个阶段 阶段一为准备
  • 4. Redis高并发分布式锁实战---大厂生产级Redis高并发分布式锁实战

    分布式缓存技术Redis 1 手写分布式锁 2 Redis Lua 3 Redisson 4 redis分布式锁在集群中存在的问题 本文是按照自己的理解进行笔记总结 如有不正确的地方 还望大佬多多指点纠正 勿喷 课程内容 1 高并发场景秒杀
  • Elasticsearch 在kibana中对索引名称进行重命名

    问题 在实际的工作中 遇到已经将数据写入es 但是后边需要对这个索引进行重命名 如 test 20190122 test 20190121 需要重命名为test 2019 对于数据量比较少时 创建多个索引 需要创建多个分片 造成存储资源的浪
  • 正则表达式——Pattern.DOTALL

    项目测试过程中 测试发现短信内容无法正常解析成2个部分 代码如下 public static void main String args String testStr 13800000000 孔雀东南飞 五里一徘徊 n 十三能织素 十四学裁