正则表达式(java)
概念:
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。
正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
用途:
通常用于判断语句,检查字符串是否满足某一格式(匹配)。字符串查找、替换等。
正则表达式是含有一些特殊意义的字符的字符串,这些特殊字符称为正则表达式的元字符。
涉及的类
java.lang.String
java.util.regex.Pattern----模式
java.util.regex.Matcher---结果
示例:"."代表任何一个字符。“abc”用“...”匹配
public class RegExp {
public static void main(String[] args){
//简单介绍正则表达式
System.out.println("abc".matches("..."));
}
}
"\d"---0-9任意数字,java正则表达式在元字符基础上需要加"\"区分转义字符,所以写成“\\d”
public class RegExp {
public static void main(String[] args){
//简单介绍正则表达式
p("abc".matches("..."));//匹配
//"\d"---匹配数字
p("d1234w".replaceAll("\\d", "-"));//替换,采用的是反斜杠
}
public static void p(Object o){
System.out.println(o);
}
}
类的介绍:
Pattern
定义:
A compiled representation of a regular expression.
A regular expression, specified as a string, must first be compiled into an instance of this class. The resulting pattern can then be used to create a Matcher
object that can match arbitrary character sequences against the regular expression. All of the state involved in performing a match resides in the matcher, so many matchers can share the same pattern.
A typical invocation sequence is thus
Pattern p = Pattern.compile
("a*b");
Matcher m = p.matcher
("aaaaab");
boolean b = m.matches
();
A matches
method is defined by this class as a convenience for when a regular expression is used just once. This method compiles an expression and matches an input sequence against it in a single invocation. The statement
boolean b = Pattern.matches("a*b", "aaaaab");
is equivalent to the three statements above, though for repeated matches it is less efficient since it does not allow the compiled pattern to be reused.
下面的写法更有效率efficient ,同时Pattern和Matcher提供了更多的方法。
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
[a-z]代表一个在a-z范围内的字母
[]代表范围;
限定修饰符
?---0次或者多次
*----0次或者多次
+---一次或者多次
{n}---正好出现{n}次
{n,}--至少出现n次
{n,m}出现n~m次
//范围
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class RegExp {
public static void main(String[] args){ //范围
p("a".matches("[abc]"));
p("a".matches("[^abc]"));//除了abc之外的都可以
p("A".matches("[a-zA-Z]"));//任意字母都可以
p("A".matches("[a-z]|[A-Z]"));//a-z或者A-Z,任意字母都可以
p("A".matches("[a-z[A-Z]]"));//一样
p("A".matches("[A-Z]&&[REG]"));//属于A-Z而且是EEG中的一个 }
public static void p(Object o){
System.out.println(o);
}
}
//Predefined character classes
"\\".matches("\\\\")----匹配一个反斜线要写4个,前面写一个就会认为是转义,后面写两个会出错,三个转义,四个正确(暂时不清楚原理)
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class RegExp {
public static void main(String[] args){ //认识\s \w \d
p(" \n\r\t".matches("\\s{4}"));
p(" ".matches("\\S"));
p("a_8".matches("\\w{3}"));
p("abc888&^%".matches("[a-z]{1,3}\\d+[&^#%]+"));
p("\\".matches("\\\\")); }
public static void p(Object o){
System.out.println(o);
}
}
Predefined character classes | |
---|---|
. | Any character (may or may not match line terminators) |
\d | A digit: [0-9] |
\D | A non-digit: [^0-9] |
\h | A horizontal whitespace character: [ \t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000] |
\H | A non-horizontal whitespace character: [^\h] |
\s | A whitespace character: [ \t\n\x0B\f\r] |
\S | A non-whitespace character: [^\s] |
\v | A vertical whitespace character: [\n\x0B\f\r\x85\u2028\u2029] |
\V | A non-vertical whitespace character: [^\v] |
\w | A word character: [a-zA-Z_0-9] |
\W | A non-word character: [^\w] |
find()
Attempts to find the next subsequence(子序列) of the input sequence that matches the pattern.
reset()
Resetting a matcher discards all of its explicit state information and sets its append position to zero.
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class RegExp {
public static void main(String[] args){ //matches find looking
Pattern p = Pattern.compile("\\d{3,5}");
String s = "123-45623-789-00";
Matcher m = p.matcher(s);
p(m.matches());
m.reset();//matches方法和find方法会造成冲突,记得要调用reset方法
p(m.find());
p(m.start()+"-"+ m.end());
p(m.find());
p(m.start()+"-"+ m.end());
p(m.find());
p(m.start()+"-"+ m.end());
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt());
p(m.lookingAt()); }
public static void p(Object o){
System.out.println(o);
}
}
查找替代
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class RegExp {
public static void main(String[] args){ //replacement 可以参考appendReplacement()在API文档里面的描述
Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher("java Java Java I love Java u hate JAVA sfarwwfr");
// p(m.replaceAll("JAVA"));//所有都替换成JAVA
StringBuffer buf = new StringBuffer();
int i = 0;
while(m.find()){ //寻找
i++;
if (i%2 == 0) { //单数替换为java双数替换成JAVA
m.appendReplacement(buf, "java");
} else {
m.appendReplacement(buf, "JAVA");
}
}
m.appendTail(buf);//appendReplacement()多次调用后用此方法补全尾部
p(buf);
}
public static void p(Object o){
System.out.println(o);
}
}
分组
Matcher.group()-----Returns the input subsequence matched by the previous match.
1 ((A)(B(C)))
2 (A)
3 (B(C))
4 (C)
group运用括号可以得到不同的分组,eg:group(1);group(2)
public class RegExp {
public static void main(String[] args){ //groupregex
Pattern p = Pattern.compile("(\\d{3,5})|([a-z]{2})");
String s = "123aa-34345bb-234cc-00";
Matcher m = p.matcher(s);
while (m.find()) {
p(m.group(2));
}
}
public static void p(Object o){
System.out.println(o);
}
}
总结几个重要的知识点:
正则表达式(java)的更多相关文章
- 正则表达式 java
如果你曾经用过Perl或任何其他内建正则表达式支持的语言,你一定知道用正则表达式处理文本和匹配模式是多么简单.如果你不熟悉这个术语,那么"正则表达式"(Regular Expres ...
- 正则表达式 java版
众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛 ...
- 正则表达式——Java程序员懂你
正则表达式 关键字:正则表达式,Pattern,Matcher,字符串方法,split,replace 前文书立下了一个flag,这里要把它完成,就是正则表达式,它是一个工具,是很早就存在于标准Uni ...
- 最新手机号正则表达式 java 、javascript版正则表达式验证是否为11位有效手机号码
最近在做注册登陆页面,都要涉及到验证11位有效手机号码,这里贴出代码,希望能帮到有这个开发需求的朋友. function isPoneAvailable($poneInput) { var myreg ...
- 正则表达式(Java版整理)
基础 元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 ^ 匹配字符串的开始 $ 匹配字符串的结束 \b 匹配字符串的结束 ...
- 正则表达式java,javaScript应用
dfa nfa 混合:捕获:断言: 正则引擎大体上可分为不同的两类:DFA和NFA,而NFA又基本上可以分为传统型NFA和POSIX NFA. 1.正则语法 捕获组: 没用()的字符都是一个一个 ...
- Java正则表达式java.util.regex类的简单使用
1.什么是正则表达式? 正则表达式(regular expression)是根据字符串集合内每个字符串共享的共同特性来描述字符串集合的一种途径.正则表达式可以用于搜索.编辑或者处理文本和数据. Jav ...
- 常用的正则表达式@java后台
package Regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @作者 Goofy * @邮件 ...
- 正则表达式&&Java文本复杂操作
正则表达式1.正则表达式的优势和用途? 一种强大而灵活的文本处理工具: 大部分编程语言 .数据库.文本编辑器.开发环境都支持正则表达式.2.正则表达式定义: 正如他的名字一样是描述了一个规则,通过这个 ...
- 密码校验正则表达式(java 环境)
密码校验需求: 1) 密码控制只能输入字母.数字.特殊符号(~!@#$%^&*()_+[]{}|\;:'",./<>?)2) 长度 6-16 位,必须包括字母.数字.特殊 ...
随机推荐
- golang类型判断
_.ok:=interface{}(a).(B) 此语句用于判断对象a是否是B类型 也可以判断对象a是否实现了B接口 package main import "fmt" type ...
- 最少拦截系统 HDU - 1257
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于 ...
- docker swarm英文文档学习-12-在集群模式中的Raft共识
Raft consensus in swarm mode 在集群模式中的Raft共识 当Docker引擎在集群模式下运行时,manager节点实现Raft 共识算法来管理全局集群状态.Docker s ...
- String.valueOf()方法注意
String.valueOf();可以将 int char long float double boolean char[] 转化为字符串输出,但不是这几个类型时候,则会使用Object类型接收,底层 ...
- 在 Linux 上安装 Oracle 数据库 11g
http://www.oracle.com/ocom/groups/public/@otn/documents/webcontent/229016_zhs.htm
- JS数组的需要注意的问题
一.在js中数组是我们经常使用的数据类型,也为我们提供了很多方法.但是有些方法需要注意使用: 1.indexOf(args):匹配一个数组中与args相等的项的索引位置,如果该数组包含这个匹配项则返回 ...
- POJ2253(dijkstra堆优化)
https://vjudge.net/problem/POJ-2253 Freddy Frog is sitting on a stone in the middle of a lake. Sudde ...
- Caused by: java.lang.IllegalStateException: commit already called
出现的情况,当FragmentTransaction是全局变量时,fragment智能调用一次commint: 异常的意思:commint已经被调用过了. 所以不要重复调用它就好了.
- 串口通信-MSComm控件使用详解
串口通信-MSComm控件使用详解 2012年11月13日 09:35:45 他山之石可以攻玉 阅读数:37952更多 个人分类: 控件编程Delphi编程 MSComm 控件通过串行端口传输和接 ...
- SQLServer 窗口函数(转载)
一.窗口函数的作用 窗口函数是对一组值进行操作,不需要使用GROUP BY 子句对数据进行分组,还能够在同一行中同时返回基础行的列和聚合列.窗口函数,基础列和聚合列的查询都非常简单. 二.语法格式 窗 ...