概念:

正则表达式,又称规则表达式。(英语: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();

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)的更多相关文章

  1. 正则表达式 java

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

  2. 正则表达式 java版

    众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛 ...

  3. 正则表达式——Java程序员懂你

    正则表达式 关键字:正则表达式,Pattern,Matcher,字符串方法,split,replace 前文书立下了一个flag,这里要把它完成,就是正则表达式,它是一个工具,是很早就存在于标准Uni ...

  4. 最新手机号正则表达式 java 、javascript版正则表达式验证是否为11位有效手机号码

    最近在做注册登陆页面,都要涉及到验证11位有效手机号码,这里贴出代码,希望能帮到有这个开发需求的朋友. function isPoneAvailable($poneInput) { var myreg ...

  5. 正则表达式(Java版整理)

    基础 元字符 代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 ^ 匹配字符串的开始 $ 匹配字符串的结束 \b 匹配字符串的结束 ...

  6. 正则表达式java,javaScript应用

    dfa nfa 混合:捕获:断言:  正则引擎大体上可分为不同的两类:DFA和NFA,而NFA又基本上可以分为传统型NFA和POSIX NFA.   1.正则语法 捕获组: 没用()的字符都是一个一个 ...

  7. Java正则表达式java.util.regex类的简单使用

    1.什么是正则表达式? 正则表达式(regular expression)是根据字符串集合内每个字符串共享的共同特性来描述字符串集合的一种途径.正则表达式可以用于搜索.编辑或者处理文本和数据. Jav ...

  8. 常用的正则表达式@java后台

    package Regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @作者 Goofy * @邮件 ...

  9. 正则表达式&&Java文本复杂操作

    正则表达式1.正则表达式的优势和用途? 一种强大而灵活的文本处理工具: 大部分编程语言 .数据库.文本编辑器.开发环境都支持正则表达式.2.正则表达式定义: 正如他的名字一样是描述了一个规则,通过这个 ...

  10. 密码校验正则表达式(java 环境)

    密码校验需求: 1) 密码控制只能输入字母.数字.特殊符号(~!@#$%^&*()_+[]{}|\;:'",./<>?)2) 长度 6-16 位,必须包括字母.数字.特殊 ...

随机推荐

  1. JDK10源码阅读--String

    jdk源码里对String的介绍: String 是不可变的,一旦被创建其值不能被改变. String buffers 支持可变String. 因为String是不可变的, 所以它们可以被共享. 例如 ...

  2. Python 如何删除列表中的空值

    今天在获取android性能CPU测试数据时,发现这么一个问题: # -*- coding:utf-8 -*- import os import time cpuInfo = os.popen(r'a ...

  3. JFreeChart柱状图单组柱子的不同颜色显示

    JFreeChart柱状图中单组柱子用不同颜色来显示的实现方法是自定义一个Renderer来继承BarRenderer类,然后重载getItemPaint(int i,int j)方法. 实现效果如下 ...

  4. Ngnix中的fastcgi參数性能优化和解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luozhonghua2014/article/details/37737823 优化性能參数设置,在 ...

  5. 记录清除wnTKYg挖矿工木马(守护进程ddg.xxxx)的过程

    起因,阿里云多次提醒我的一台服务器有恶意发包行为,且给出了一些解决办法.之前也没太在意,就按照解决办法处理了一下.然后过一段时间,还是提示有此行为. 猜肯定是中了木马了,开始以为是被肉鸡了拿来做DDo ...

  6. ethereum/EIPs-191 Signed Data Standard

    https://github.com/ethereum/EIPs/blob/master/EIPS/eip-191.md eip title author status type category c ...

  7. 【一】mongodb安装及配置

    一.mongodb安装 1.下载并解压 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.2.0.tgz tar ...

  8. python链家网高并发异步爬虫asyncio+aiohttp+aiomysql异步存入数据

    python链家网二手房异步IO爬虫,使用asyncio.aiohttp和aiomysql 很多小伙伴初学python时都会学习到爬虫,刚入门时会使用requests.urllib这些同步的库进行单线 ...

  9. 【Codeforces 1137C】Museums Tour

    Codeforces 1137 C 题意:给一个有向图,一周有\(d\)天,每一个点在每一周的某些时刻会开放,现在可以在这个图上从\(1\)号点开始随意地走,问最多能走到多少个开放的点.一个点如果重复 ...

  10. 【转】Java生成图片验证码

    原文转自:http://blog.csdn.net/ruixue0117/article/details/22829557 看了挺多图片验证码的代码,感觉没什么长的好看点的,就自己动手写了个,写完发现 ...