java 字符串匹配正则表达式_Java正则表达式字符串匹配示例
一位以前的同事在群里面突然发了个需求,要通过正则表达式来取值。给我发过来一张图,
从图中可以出,需求是,通过下面的正则表达式,取出红色框所标示的内容
开始理解错误,我以为是要取出中间的那些内容,不包括"[标题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正则表达式字符串匹配示例相关推荐
- python java正则表达式_java 正则表达式
Java 正则表达式 正则表达式定义了字符串的模式. 正则表达式可以用来搜索.编辑或处理文本. 正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. 正则表达式实例 一个字符串其实就是一个简 ...
- java生日正则表达式_Java正则表达式详解
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单.如果你不熟悉这个术语,那么"正则表达式"(Regular Expres ...
- java 数字范围正则_Java 正则表达式
正则表达式 概述 正则表达式定义了字符串的模式.正则表达式可以用来搜索.编辑或处理文本.正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别. java.util.regex 包主要包括以下三 ...
- java百度结果的正则表达式_java正则表达式
元字符 描述 \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符.例如,"\\n"匹配\n."\n"匹配换行符.序列"\\"匹配&q ...
- java正则在线转换_java正则表达式(转)
元字符 描述 \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符.例如,"\\n"匹配\n."\n"匹配换行符.序列"\\"匹配&q ...
- java中printreader类_Java基本字符流输入输出类的使用
1. 基本字符输入输出类结构 Java基本字符流类结构 2. 抽象父类:Writer & Reader Writer类 public abstract class Writer extends ...
- java qq验证手机号码_java正则表达式表单验证类工具类(验证邮箱、手机号码、qq号码等)...
package util; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 使用正则表达式进行表单验证 * ...
- java 数组正则表达式_java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】...
本文实例讲述了java正则表达式实现提取需要的字符并放入数组.分享给大家供大家参考,具体如下: 这里演示java正则表达式提取需要的字符并放入数组,即arraylist数组去重复功能. 具体代码如下: ...
- 用java实现串匹配问题_java实现字符串匹配问题之求最大公共子串
转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/38924981 最近在项目工作中有一个关于文本对比的需求,经过这段时间的学习,总结 ...
最新文章
- MCU(多点控制单元)
- 初识莫队——小Z的袜子
- Centos DNS服务器搭建
- WSDL SOAP 绑定
- 1251: 字母图形 [水题]
- HDFS Java API 实践
- [论文]论文的一般结构
- 帆软删除行操作提示并确认 js:FR.Msg.confirm
- Linux文件IO操作之IO编程(一)
- php 电脑的右下角弹框,电脑右下角弹出广告的解决方法
- 怎样快速打出初中常用的化学反应方程式
- iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
- RestCloud 微服务监控中心
- 阿里mysql密码_阿里云自带mysql 密码
- 腾讯物联网云平台 密钥 MQTT参数生成及密码加密算法实现
- android usb充电电流,留心手机充电电流大小,别等到“机毁人伤”时才后悔!
- 关于android的webview打开淘宝天猫链接问题
- The Unarchiver for Mac(mac解压缩神器)
- windows server 2008搭建nfs共享服务
- 用MOS管驱动电机吧