一位以前的同事在群里面突然发了个需求,要通过正则表达式来取值。给我发过来一张图,

从图中可以出,需求是,通过下面的正则表达式,取出红色框所标示的内容

开始理解错误,我以为是要取出中间的那些内容,不包括"[标题BEGIN]"和“[标题END]”,于是写了下面的代码:

private static void getStr(){

String str="[标题BEGIN][@cms_chanel id=70]

[/@cms_chanel]#list>[标题END]";

Pattern p =Pattern.compile("\\[标题BEGIN\\](.*)\\[标题END\\]");

Matcher m =p.matcher(str);

ArrayList matches= new ArrayList();

while(m.find())

{

matches.add(m.group(1));

}

for(String s: matches)

{

System.out.println("匹配结果:"+s);

}

}

回过头来一看需求,发现不对,于是再修改,主要是针对pattern进行修改

过程如下(按顺序);

1.  Pattern p =Pattern.compile("(\\[标题BEGIN\\](.*)\\[标题END\\])*");

输出结果:

匹配结果:[标题BEGIN][@cms_chanel id=70]

[/@cms_chanel]#list>[标题END]

匹配结果:null

第一个内容是我们想要的结果,但是产生了两个结果,而且第二个是null,显然是不对的。

当时猜想是(.*)匹配不到。于是有了下面的修改

2. Pattern p =Pattern.compile("(\\[标题BEGIN\\].*\\[标题END\\])*");

输出结果:

匹配结果:[标题BEGIN][@cms_chanel id=70]

[/@cms_chanel]#list>[标题END]

匹配结果:null

这次注意到,最后面那个*没法匹配,null是这个*匹配出来的。于是修改如下

3. Pattern p =Pattern.compile("(\\[标题BEGIN\\].*\\[标题END\\])");

输出结果:

匹配结果:[标题BEGIN][@cms_chanel id=70]

[/@cms_chanel]#list>[标题END]

这就对了,是我们所需要的结果。

也可以换成

Pattern p =Pattern.compile("(\\[标题BEGIN\\](.*)\\[标题END\\])");

效果是一样的。

后来还发现一个问题,这样的话,如果包含回车换行的话(\n\r等),没法匹配到,于是查了点资料。

这个问题有两个解决办法:

1.设置pattern的模式为DOTALL

2.使用正则表达式对字符串进行全部替换,表达式为: String reg = "(?s)'.*'";

这里我们改写一下代码

Pattern p =Pattern.compile("(\\[标题BEGIN\\](.*)\\[标题END\\])",Pattern.DOTALL);

回车换行也能匹配了。

解决了一个问题,学到了java的正则表达式使用方法,这可能只是java关于正则的冰山一角,也许还有其他更好用得方法,如果今后有发现,再补充进来。

也许你对正则表达式还不是那么熟悉,那么我建议你先学好一些基础再来看本文。推荐看一看微软javascript的说明文档(chm格式),里面对正则表达式的概念说的非常详细。

如果你对正则表达式比较熟悉的话,那么恭喜你,本文对你来说没有任何难度了。

感谢所有曾经一起玩耍的小伙伴,是你们让我有了成长,让我一次次的进步,谢谢你们!

java 字符串匹配正则表达式_Java正则表达式字符串匹配示例相关推荐

  1. python java正则表达式_java 正则表达式

    Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 正则表达式实例 一个字符串其实就是一个简 ...

  2. java生日正则表达式_Java正则表达式详解

    如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单.如果你不熟悉这个术语,那么"正则表达式"(Regular Expres ...

  3. java 数字范围正则_Java 正则表达式

    正则表达式 概述 正则表达式定义了字符串的模式.正则表达式可以用来搜索.编辑或处理文本.正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. java.util.regex 包主要包括以下三 ...

  4. java百度结果的正则表达式_java正则表达式

    元字符 描述 \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符.例如,"\\n"匹配\n."\n"匹配换行符.序列"\\"匹配&q ...

  5. java正则在线转换_java正则表达式(转)

    元字符 描述 \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符.例如,"\\n"匹配\n."\n"匹配换行符.序列"\\"匹配&q ...

  6. java中printreader类_Java基本字符流输入输出类的使用

    1. 基本字符输入输出类结构 Java基本字符流类结构 2. 抽象父类:Writer & Reader Writer类 public abstract class Writer extends ...

  7. java qq验证手机号码_java正则表达式表单验证类工具类(验证邮箱、手机号码、qq号码等)...

    package util; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 使用正则表达式进行表单验证 * ...

  8. java 数组正则表达式_java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】...

    本文实例讲述了java正则表达式实现提取需要的字符并放入数组.分享给大家供大家参考,具体如下: 这里演示java正则表达式提取需要的字符并放入数组,即arraylist数组去重复功能. 具体代码如下: ...

  9. 用java实现串匹配问题_java实现字符串匹配问题之求最大公共子串

    转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/38924981 最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结 ...

最新文章

  1. MCU(多点控制单元)
  2. 初识莫队——小Z的袜子
  3. Centos DNS服务器搭建
  4. WSDL SOAP 绑定
  5. 1251: 字母图形 [水题]
  6. HDFS Java API 实践
  7. [论文]论文的一般结构
  8. 帆软删除行操作提示并确认 js:FR.Msg.confirm
  9. Linux文件IO操作之IO编程(一)
  10. php 电脑的右下角弹框,电脑右下角弹出广告的解决方法
  11. 怎样快速打出初中常用的化学反应方程式
  12. iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
  13. RestCloud 微服务监控中心
  14. 阿里mysql密码_阿里云自带mysql 密码
  15. 腾讯物联网云平台 密钥 MQTT参数生成及密码加密算法实现
  16. android usb充电电流,留心手机充电电流大小,别等到“机毁人伤”时才后悔!
  17. 关于android的webview打开淘宝天猫链接问题
  18. The Unarchiver for Mac(mac解压缩神器)
  19. windows server 2008搭建nfs共享服务
  20. 用MOS管驱动电机吧

热门文章

  1. 天津web前端培训:一个过来人告诉你如何轻松学习web
  2. Oracle-Windows定时备份
  3. 【Python】set集合详解
  4. 相机标定 - (01) - 相机标定简介
  5. Android有未接来电后处理(判断未接来电)
  6. 时间管理:紧急任务与重要任务
  7. 超10000点!云之翼云桌面为安徽50余所高校教育注入新动能
  8. 计算机毕业设计之java+javaweb的共享厨房信息系统
  9. Java高并发革命!JDK19新特性——虚拟线程(Virtual Threads)
  10. 留学高中生独自在宿舍玩死亡游戏 客死异乡