正则表达式-JAVA
2015-08-30 16:41
591 查看
转载请标明出处:
/article/8129709.html
本文出自:【M家杰的博客】
初学者视角:正则表达式是一种字符串搜索和匹配的工具
Pattern 类的实例是不可变的,可供多个并发线程安全使用。Matcher 类的实例用于此目的则不安全。
官方API例子:
界定符的形式在不同语言中有所不用
Java中似乎不需要界定符
php中界定符为:
标点 ; ” _ ? . 等等
英文字母数字 a-z,A-Z,0-9
汉字、日文、阿拉伯文等其他语言文字
数理化公式等其他可见字符
不可见原子(Unicode编码表中用键盘输出后肉眼
换行符 \n
回车 \r
制表符 \t
空格
等等其他不可见符号
特别的写法:
特别的写法:
JAVA开启懒惰匹配:好像没有专门的这种模式,只能自己写,使用:
例如表达式:
PHP开启懒惰匹配:在界定符号后面加大写U。例:
PHP开启:在界定符号后面加小写i。例:
PHP开启:在界定符号后面加小写x。例:
5.让
JAVA开启:
PHP开启:在界定符号后面加小写s。例:
特别的写法:
java模式单元的例子:
打印结果:
例子中
可以从打印结果看出,我们可以利用模式单元方便的拆分出想要的子串
java中通过
在Java中特别需要注意
两位浮点型:
简单邮箱地址:
简单的URL:
/article/8129709.html
本文出自:【M家杰的博客】
初学者视角:正则表达式是一种字符串搜索和匹配的工具
java中的关键类和方法
Pattern类,正则表达式的编译表示形式。
Pattern.compile(String)填写正则表达式
Pattern.compile(String,int)填写正则表达式和修正模式的标识
Pattern.matcher(CharSequence)填入目标字符串,返回Matcher
Pattern.matches(String, CharSequence)直接填入正则表达式和目标字符串进行匹配。
Matcher类, 通过解释 Pattern 对 字符串 执行匹配操作的引擎。
Matcher.matches()将整个字符串与模式匹配。
Matcher.find()在字符串中查找匹配的下一个子串
Matcher.group()返回匹配的字符串
Matcher.replaceAll(String)将整个字符串中匹配的子串改为填人的字符串
Pattern 类的实例是不可变的,可供多个并发线程安全使用。Matcher 类的实例用于此目的则不安全。
官方API例子:
//经典写法 Pattern p = Pattern.compile("a*b"); Matcher m = p.matcher("aaaaab"); boolean b = m.matches();
//简便写法 boolean b = Pattern.matches("a*b", "aaaaab");
界定符
表示一个正则表达式的开始和结束界定符的形式在不同语言中有所不用
Java中似乎不需要界定符
php中界定符为:
/或者
#或者
{}
原子
可见原子(Unicode编码表中用键盘输出后肉眼可见的字符)
标点 ; ” _ ? . 等等
英文字母数字 a-z,A-Z,0-9
汉字、日文、阿拉伯文等其他语言文字
数理化公式等其他可见字符
不可见原子(Unicode编码表中用键盘输出后肉眼
不可见的字符)
换行符 \n
回车 \r
制表符 \t
空格
等等其他不可见符号
元字符
|匹配两个或者多个分支选择
[]匹配方括号中的任意一个原子
[^]匹配除方括号中的原子之外的任意字符
.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符(注意包含下划线):[a-zA-Z_0-9]
\W非单词字符:[^\w]
|和
[]的区别在于,
|是取左右的一整串字符串去匹配,
[]是取括号中的任意单个字符去匹配
特别的写法:
[ab]cd匹配”acd”和”bcd”
量词
{n}表示其前面的原子恰好出现n次
{n,}表示其前面的原子最少出现了n次
{n,m}表示其前面的原子最少出现n次,最多出现m次
*匹配0次、1次或者多次其之前的原子,等同于{0,}
+匹配1次或者多次其之前的原子,等同于{1,}
?匹配0次或者1次其之前的原子,等同于{0,1}
特别的写法:
A?K匹配”AK”和”K”
边界控制
^匹配字符串开始的位置
$匹配字符串结束的位置
^abcde$表示整个字符串开始必须为”a”,结束必须为”e”
修正模式
1.贪婪匹配(默认)
匹配结果存在歧义时取其长2.懒惰匹配
匹配结果存在歧义时取其短JAVA开启懒惰匹配:好像没有专门的这种模式,只能自己写,使用:
.*?
例如表达式:
mjj.*?asd匹配字段:
mjj_-1asdasdasd
PHP开启懒惰匹配:在界定符号后面加大写U。例:
/[0-9]/U
3.忽略英文字母大小写
JAVA开启:Pattern.CASE_INSENSITIVE
PHP开启:在界定符号后面加小写i。例:
/[0-9]/i
4.忽略空白
JAVA开启:Pattern.COMMENTS
PHP开启:在界定符号后面加小写x。例:
/[0-9]/x
5.让.
可以匹配换行符
JAVA开启:Pattern.DOTALL
PHP开启:在界定符号后面加小写s。例:
/[0-9]/s
模式单元
()模式单元的存在可以使对字符串的操作更加灵活
特别的写法:
(M|A)asd匹配”Masd”和”Aasd”
java模式单元的例子:
String str = "mjj.mjjmjj@qq.com"; String regex = "^\\w+(\\.\\w+|\\-\\w+)*@\\w+(\\.\\w+)+$"; Matcher matcher = Pattern.compile(regex).matcher(str); matcher.matches(); System.out.println(matcher.group(0)); System.out.println(matcher.group(1)); System.out.println(matcher.group(2));
打印结果:
mjj.mjjmjj@qq.com .mjjmjj .com
例子中
regex表达式的整体为总模式,
(\\.\\w+|\\-\\w+)和
(\\.\\w+)为子模式。
可以从打印结果看出,我们可以利用模式单元方便的拆分出想要的子串
java中通过
Matcher.group(int)方法获取
注意事项
在匹配中文时会因为编码不同(UTF-8,GBK等等)而造成错误,比较好的解决方法是将表达式中的中文转为Unicode编码在Java中特别需要注意
\,php中写
\d在Java中写
\\d
简单示例(JAVA)
非空:.+
两位浮点型:
^\\d+\\.\\d{2}$
简单邮箱地址:
^\\w+(\\.\\w+|\\-\\w+)*@\\w+(\\.\\w+)+$
简单的URL:
^(https?://)?(\\w+\\.)+[a-zA-Z]+$
参考资料
JavaTM Platform Standard Ed. 6相关文章推荐
- JDK7之新的遍历目录API
- Java Servlet Example
- 【Java】基础语法
- spring 中 isolation 和 propagation 详解
- java 类加载机制
- 刚开始学习JAVA语言程序,做第一个JAVA程序
- java字节码及ASM编程
- Mac安装有jdk1.6和1.7 环境变量已经设置为1.7,但是mvn -version仍然显示的版本1.6
- Java I/O输入输出流
- java输入输出流
- The Java EE 6 Tutorial Finalizing a Servlet
- Spring组件扫描<context:component-scan/>使用详解
- SpringMVC基础-@CookieValue
- java -- 提交乱码汇总
- SpringMVC基础-@RequestHeader
- java中throws和throw的区别和用法
- Java 编程
- java 时间计算
- JAVA String.format 方法使用介绍
- java 时间与字符串之间的转换