概念:

正则表达式,又称规则表达式。(英语: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. indexOf() 使用方法(数组去重)

    对于indexOf()的用法一直停留在查找第几个字符串,却不知道它能用到数组去重中,首先还是温顾下indexOf()的语法: <!DOCTYPE html> <html lang=& ...

  2. 使用with open语句(未完)

    来源链接 https://blog.csdn.net/testcs_dn/article/details/45719357 读文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和 ...

  3. c++ 常成员函数 和 常对象

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/zhuyingqingfen/article/details/31751111 先明白几个概念: 1. ...

  4. Spring Boot开发Web应用

    静态资源访问 在我们开发Web应用的时候,需要引用大量的js.css.图片等静态资源. 默认配置 Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /s ...

  5. P2347 砝码称重 (01背包)

    题目描述 设有 1g1g1g . 2g2g2g . 3g3g3g . 5g5g5g . 10g10g10g . 20g20g20g 的砝码各若干枚(其总重 ≤1000 \le 1000≤1000 ), ...

  6. git fork之如何同步更新

    1.打开git fork的开源项目(这里我以git fork vscode为例): 2.点击New pull request 3.选择你自己的 4.选择完后出现如图 5.调整状态,右边改为源fork地 ...

  7. Objective-C 单例实现

    Objective-C中用的最多的设计模式就是单例,它最常见的实现如下: + (WPXXService *)sharedInstance { static WPXXService *g_service ...

  8. Attention[Content]

    0. 引言 神经网络中的注意机制就是参考人类的视觉注意机制原理.即人眼在聚焦视野区域中某个小区域时,会投入更多的注意力到这个区域,即以"高分辨率"聚焦于图像的某个区域,同时以&qu ...

  9. 开发工具|给你的项目买份保险:Python虚拟环境

    读完需要 9 分钟 1. 什么是虚拟环境? 虚拟环境的意义,就如同 虚拟机 一样,它可以实现不同环境中Python依赖包相互独立,互不干扰.这在一定程度的意义上,给了我们的项目一份很有力的保障.在这里 ...

  10. BZOJ3149 CTSC2013 复原 搜索

    传送门 \(N \leq 20\)很适合暴搜-- 第二问最大独立集裸题,\(O(2^NN)\)的算法都能过-- 考虑第一问,使用搜索寻找可行解 每一次枚举一条弦的两个端点,通过位运算计算与其相交的弦的 ...