JAVA中的正则表达式--待续
1、关于“\”,在JAVA中的正则表达式中的不同;
在其他语言中"\\"表示为:我想要在正则表达式中插入一个普通的反斜杠;
在Java中“\\”表示为:我想要插入一个正则表达式反斜杠;
eg:验证整数的正则表达式为\\d; 如果想要插入一个反斜杠则为:\\\\ ;
如果是换行符和制表符则为\n 和\t ;
2、特殊字符
| Greedy 数量词 | |
|---|---|
| X? | X,一次或一次也没有 | 
| X* | X,零次或多次 | 
| X+ | X,一次或多次 | 
| X{n} | X,恰好 n 次 | 
| X{n,} | X,至少 n 次 | 
| X{n,m} | X,至少 n 次,但是不超过 m 次 | 
| Reluctant 数量词 | |
| X?? | X,一次或一次也没有 | 
| X*? | X,零次或多次 | 
| X+? | X,一次或多次 | 
| X{n}? | X,恰好 n 次 | 
| X{n,}? | X,至少 n 次 | 
| X{n,m}? | X,至少 n 次,但是不超过 m 次 | 
| Possessive 数量词 | |
| X?+ | X,一次或一次也没有 | 
| X*+ | X,零次或多次 | 
| X++ | X,一次或多次 | 
| X{n}+ | X,恰好 n 次 | 
| X{n,}+ | X,至少 n 次 | 
| X{n,m}+ | X,至少 n 次,但是不超过 m 次 | 
演示代码:
package com.st.day20150525; import java.util.regex.Matcher;
import java.util.regex.Pattern; public class StringTest03 { public static String message ="The class String includes methods for examining "
+ "individual characters of the sequence, for comparing strings, "
+ "for searching strings, for extracting substrings, and for "
+ "creating a copy of a string with all characters translated to "
+ "uppercase or to lowercase. Case mapping is based on the Unicode "
+ "Standard version specified by the Character class."; public static void main(String[] args) {
/**
* 首先介绍String自带的三个正则表达式的工具
*/
//1、使用String中的内建的功能,进行字符的验证
System.out.println("1、使用String中的内建的功能,进行字符的验证");
System.out.println("1243".matches("-?\\d+"));
System.out.println("+911".matches("-?\\d+"));
System.out.println("+911".matches("(-|\\+)?\\d+")); System.out.println("----------------------------------------------");
//2、使用String.split() 将字符串从正则表达式匹配的地方分开
System.out.println("2、使用String.split() 将字符串从正则表达式匹配的地方分开");
String[] str01 = message.split("of|to"); // 从of 或者 to 的地方进行分开
for (int i = 0; i < str01.length; i++) {
System.out.println("第"+i+": "+str01[i]);
}
String[] str02 = message.split("\\W"); // 从空格的地方进行分开
for (int i = 0; i < str02.length; i++) {
System.out.print("第"+i+": "+str02[i]+" ");
}
System.out.println("----------------------------------------------");
// 3、使用String中的替代,进行正则表达是的验证
System.out.println("3、使用String中的替代,进行正则表达是的验证");
String str03 = message.replaceFirst("the|of|to", "你被替换了");
System.out.println(str03);
// 替换所有的以f开头的单词
String str04 = message.replaceAll("f\\w+", "apple");
System.out.println(str04);
System.out.println("----------------------------------------------");
/**
* 使用Pattern、Matcher进行正则表达式验证
* Pattern:表示编译后的正则表达式对象,可以通过Pattern.compile()来编译你的表达式获取该对象
* 调用Pattern对象中的matcher方法,传入你要验证的字符串,获取Macher对象;
* 使用Matcher对象中的方法判断各种不同类型的对象是否匹配成功。
*
* boolean matches() 字符完全匹配
* boolean lookingAt() 判断字符串开始部分是否能够匹配(不一定是整个字符串)
* boolean find() 多匹配,从头找到尾,找出所有匹配的字符
* boolean find(int i) 从第i个字符进行匹配
*
* find()可以在输入的字符的任何位置进行定位匹配正则表达式
* lookingAt()和matches() 只有在字符的最开始的地方匹配才能成功,
* lookingAt()只需要字符开始的一部分匹配成功就OK了,matches()需要字符完全的匹配
*/
Pattern pattern = Pattern.compile("\\w+");
Matcher matcher = pattern.matcher("I am a good boy!");
System.out.println("==========Matcher中的find=================");
while(matcher.find()){
System.out.println(matcher.group()); // 讲所有的单词隔开
}
int i = 0 ; // 从第三个字符开始
System.out.println("============测试find(int i)================");
while(matcher.find(i)){
System.out.print(matcher.group()+" ");
i++ ;
}
System.out.println("============测试find()、lookingAt()和matches()的不同=================");
String str = "Today is a perfect day to start living your dream."; for(String reg:new String[]{"\\w+","Today.*","T\\w+"}){
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
while (m.find()) System.out.println("find() :"+m.group()+"==="+m.start()+"==="+m.end());
System.out.println("---------------");
if(m.matches()) System.out.println("matches() :"+m.start()+"====="+m.end());
System.out.println("---------------");
if(m.lookingAt()) System.out.println("lookingAt() :"+m.start()+"==="+m.end());
} System.out.println("/////////////////////////////////////////////////////////////");
/**
* Pattern.compile(String reg,int flag); //flag为标记参数
* 在这里只介绍三种常用的标记参数
* Pattern.CASE_INSENSITIVE 忽略大小写
* Pattern.COMMENTS 忽略空格符和用“#”开始到行末的注释内容
* Pattern.MULTILINE 多行表示,表达式^ 和 $ 匹配每一行的字符
*/
System.out.println("----------------Pattern标记-----------------------------"); Pattern pa = Pattern.compile("^Java", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE) ; // 通过 “|”的标识符,组合标记的功能
Matcher ma = pa.matcher("Java is a laguage\njava regex\nJAVA is good,I like java.");
while (ma.find()) {
System.out.println(ma.group());
}
}
}
JAVA中的正则表达式--待续的更多相关文章
- 9.JAVA中的正则表达式
		
一.JAVA中的正则表达式 1.概念:以某种特定的方式描述字符串 1.Java中正则表达式的规则 ? #{0,1}-?有一个-或者没有 \\ #表示一个" ...
 - java中使用正则表达式匹配字符串
		
在Java中使用正则表达式去匹配相应的字符串: String importFileRole = "(import)\\s*[a-zA-Z0-9_<>.]+\\;";// ...
 - (转)Java中使用正则表达式的一个简单例子及常用正则分享
		
转自:http://www.jb51.net/article/67724.htm 这篇文章主要介绍了Java中使用正则表达式的一个简单例子及常用正则分享,本文用一个验证Email的例子讲解JAVA中如 ...
 - 【java  正则表达式】记录所有在java中使用正则表达式的情况
		
本篇记录在java中邂逅正则表达式的所有美丽瞬间.因为在java和js中正则表达式的语法并不一致. 1.匹配字符串中有出现[2.1开头或者&2.1或者&3.1等的] Pattern m ...
 - 译:Java 中的正则表达式性能概述
		
原文链接:https://www.baeldung.com/java-regex-performance 作者: baeldung 译者:Darren Luo 1. 概述 在本快速教程中,我们将展示模 ...
 - java 中使用正则表达式操作字符串
		
import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFl ...
 - java中的正则表达式捕获组与引用的概念
		
今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个 "(([1-9]\\d?)\\s){2}$2&q ...
 - js和java中使用正则表达式校验邮箱
		
问题:经常在项目中要校验邮箱? 邮箱格式:首位必须为字母,必须包含一个@符号,并且@之后有个名字,之后还有个.,再有一个后缀名 例如:wyp55023@163.com 一.java中代码如下: Str ...
 - java中的正则表达式And Pattern And Macher
		
在哪里?? java.util.regex包下有两个用于正则表达式的类, 一个是Matcher类, 另一个Pattern 简单例子 public class RegexLeaning { public ...
 
随机推荐
- WPF - 使用Microsoft.Win32.OpenFileDialog打开文件,使用Microsoft.Win32.SaveFileDialog将文件另存
			
1. WPF 使用这个方法打开文件,很方便,而且可以记住上次打开的路径. Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.W ...
 - 并发情况下synchronized死锁
			
存在缺陷的代码: public class DataPropertyIdAndNameRepositoryImpl{ /** 发布标志 */ private volatile boolean publ ...
 - oracle 同样数据删除(仅仅留一条)
			
DELETE FROM reg_user t1 WHERE user_name='9527008' and rowid > ( SELECT min(rowid) FROM location t ...
 - World Wind Java开发之十五——载入三维模型
			
之前的一篇博客是关于载入粗三维模型的,见http://blog.csdn.net/giser_whu/article/details/43452703,这个地方还存在着不能载入纹理的问题,一直没呢解决 ...
 - mysql 主从复制配置步骤
			
1.准备两台数据库环境,或者单台多实例环境,能否正常启动和登录. 2.配置my.cnf文件,主库配置log-bin和server-id参数,从库配置server-id,不能和主库及其他从库一样,一般不 ...
 - html中行内元素与块级元素的区别。
			
在标准文档流里面,块级元素具有以下特点 1.总是在新行上开始,占据一整行: 2.高度,行高以及外边框和内边距都可以控制: 3.宽度始终是与游览器宽度一样,与内容无关: 4.它可以容纳内联元素和其他块级 ...
 - 简单JS多级下拉框无刷新
			
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - (转).net程序员转战android第二篇---牛刀小试
			
上篇说道如何搭建android的开发环境,这一篇我们将牛刀小试一下, 完成我们第一个android APP应用. 我就从新建项目说起吧. 首先打开Eclipse,选择顶部的File(文件)——new( ...
 - Linux下oracle 11g安装
			
服务器环境要求 硬盘 20G以上 ,必须高于1G的物理内存,交换空间一般为内存的2倍,例如:1G的内存可以设置swap 分区为3G大小 在Root用户下执行以下步骤: 修改用户的SHELL ...
 - CocoaPod安装
			
http://www.360doc.com/content/14/0309/10/11029609_358970353.shtml http://www.bubuko.com/infodetail-4 ...