正则表达式(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 位,必须包括字母.数字.特殊 ...
随机推荐
- 【转】vue项目打包部署——nginx代理访问
我又来了,今天部署了下vue项目,使用nginx做了代理,这样可以解决跨域的问题,这里做一个简单讲解. 1.先看vue项目打包(我这里使用的是vscode开发工具) 这里是我的项目结构: 打包之前需要 ...
- Arduino IDE for ESP8266 ()组网
多个esp8266连接在同一个 WIFI上,在局域网内部,相互传数据 #include <ESP8266WiFi.h> #define led 2 //发光二极管连接在8266的GPIO2 ...
- the security of smart contract- 1
https://blog.zeppelin.solutions/the-hitchhikers-guide-to-smart-contracts-in-ethereum-848f08001f05 这个 ...
- Jenkins持续集成之小试牛刀
关于Jenkins的安装,大家可以参考我的这两篇文章: Ubuntu16.04环境安装jenkins docker安装jenkins及其相关问题解决 之前没有好好研究过Jenkins,只是简单学会怎么 ...
- sed插入,替换指定行的特定字符串,删除指定行首的#
sed -i '$a service snmpd start' /etc/rc.local sed -i "41s:public:mykey:g" /etc/snmp/snmpd. ...
- MATLAB——神经网络init初始化函数和adapt函数
- ESP32 environment ubuntu
ubuntu官方用的是16.04版本的,阿里源下载地址:http://mirrors.aliyun.com/ubuntu-releases/16.04/ 用官方版本的好处就是省的搞一堆各种错误 ...
- 可以设置超时版的的fetch
// 超时版的fetch _fetch(fetch, timeout) { return Promise.race([ fetch, new Promise(function (resolve, re ...
- day82
今日内容: 1.CBV源码分析: CBV:class base view(基于类的视图函数) FBV:function base view(基于方法的视图函数) 要想使用CBV首先需要导入 from ...
- [04] 高级映射 association和collection
之前我们提到的映射,都是简单的字段和对象属性一对一,假设对象的属性也是一个对象,即涉及到两个表的关联,此时应该如何进行映射处理? 先看两张表,author 和 book: 业务上对应关系为,一个 ...