- 相关推荐
java中正则表达式概述
正则表达式是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。那么java正则表达式的内容是什么呢?下面跟yjbys小编一起来看看吧!
一、正则表达式到底是什么东西?
在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。
很可能你使用过Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某个目录下的所有的Word文档的话,你会搜索*.doc。在这里,*会被解释成任意的字符串。和通配符类似,正则表达式也是用来进行文本匹配的工具,只不过比起通配符,它能更精确地描述你的需求——当然,代价就是更复杂——比如你可以编写一个正则表达式,用来查找所有以0开头,后面跟着2-3个数字,然后是一个连字号“-”,最后是7或8位数字的字符串(像010-12345678或0376-7654321)。
二、正则表达式的基本操作
正则表达式定义:符合一定规则的表达式。
作用:用于专门操作字符串。
特点:用于一些特定的符号来表示一些代码操作。这样就简化书写。所以学习正则表达式,就是在学习一些特殊符号的使用。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。
具体操作功能:
1,匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
2,切割:String split();
3,替换:String replaceAll(regex,str);如果regex中有定义组,可以在第二参数中通过$符号获取正则表达式中的已有的组。
4,获取:将字符串中的符合规则的子串取出。
操作步骤:
1),将正则表达式封装成对象。
2),让正则对象和要操作的字符串相关联。
3),关联后,获取正则匹配引擎。
4),通过引擎对符合规则的子串进行操作,比如取出。
三、API文档中常用符号
字符类 |
|
[abc] |
a、b 或 c(简单类) |
[^abc] |
任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] |
a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]] |
a 到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]] |
d、e 或 f(交集) |
[a-z&&[^bc]] |
a 到 z,除了 b 和 c:[ad-z](减去) |
[a-z&&[^m-p]] |
a 到 z,而非 m 到 p:[a-lq-z](减去) |
预定义字符类 |
|
. |
任何字符(与行结束符可能匹配也可能不匹配) |
\d |
数字:[0-9] |
\D |
非数字: [^0-9] |
\s |
空白字符:[ \t\n\x0B\f\r] |
\S |
非空白字符:[^\s] |
\w |
单词字符:[a-zA-Z_0-9] |
\W |
非单词字符:[^\w] |
边界匹配器 |
|
^ |
行的开头 |
$ |
行的结尾 |
\b |
单词边界 |
\B |
非单词边界 |
\A |
输入的开头 |
\G |
上一个匹配的结尾 |
\Z |
输入的结尾,仅用于最后的结束符(如果有的话) |
\z |
输入的结尾 |
Greedy 数量词 |
|
X? |
X,一次或一次也没有 |
X* |
X,零次或多次 |
X+ |
X,一次或多次 |
X{n} |
X,恰好 n 次 |
X{n,} |
X,至少 n 次 |
X{n,m} |
X,至少 n 次,但是不超过 m 次 |
四、方法摘要
static Pattern |
compile(String regex) 将给定的正则表达式编译到模式中。 |
static Pattern |
compile(String regex, int flags) 将给定的正则表达式编译到具有给定标志的模式中。 |
int |
flags() 返回此模式的匹配标志。 |
Matcher |
matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器。 |
static boolean |
matches(String regex, CharSequence input) 编译给定正则表达式并尝试将给定输入与其匹配。 |
String |
pattern() 返回在其中编译过此模式的正则表达式。 |
static String |
quote(String s) 返回指定 String 的字面值模式 String。 |
String[] |
split(CharSequence input) 围绕此模式的匹配拆分给定输入序列。 |
String[] |
split(CharSequence input, int limit) 围绕此模式的匹配拆分给定输入序列。 |
String |
toString() 返回此模式的字符串表示形式。 |
五、案例
1、匹配案例
1)电话号码匹配案例
public static void checkTel()
{
String tel = "16900001111";
String telReg = "1[358]\\d{9}";
System.out.println(tel.matches(telReg));
}
2)数字和字母组成的字符串匹配
public static void demo()
{
String str = "b23a23456789";
String reg = "[a-zA-Z]\\d*";
boolean b= str.matches(reg);
System.out.println(b);
}
3)QQ号码匹配
要求:5~15 0不能开头,只能是数字
public static void checkQQ()
{
String qq = "123a454";
String regex = "[1-9]\\d{4,14}";
boolean flag = qq.matches(regex);
if(flag)
System.out.println(qq+"...is ok");
else
System.out.println(qq+"... 不合法");
}
2、切割案例
按照.进行切割:splitDemo("zhangsan.lisi.wangwu","\\.");
按照\\进行切割:splitDemo("c:\\abc\\a.txt","\\\\");
按照多个空格来进行切割:String reg = " +";空格+
按照叠词切割:splitDemo("erkktyqqquizzzzzo","(.)\\1+");//按照叠词完成切割。为了可以让规则的结果被重用,可以将规则封装成一个组。用()完成。组的出现都有编号。从1开始。 想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取。
3、替换案例
将字符串中的数组替换成#。
String str = "wer1389980000ty1234564uiod234345675f";
replaceAllDemo(str,"\\d{5,}","#");
将重叠的字符替换成单个字母。zzzz->z
String str1 = "erkktyqqquizzzzzo";//
replaceAllDemo(str1,"(.)\\1+","$1");
4、获取案例
获取:将字符串中的符合规则的子串取出。
public static void getDemo()
{
String str = "ming tian jiu yao fang jia le ,da jia。";
System.out.println(str);
String reg = "\\b[a-z]{4}\\b";
//将规则封装成对象。
Pattern p = Pattern.compile(reg);
//让正则对象和要作用的字符串相关联。获取匹配器对象。
Matcher m = p.matcher(str);
//将规则作用到字符串上,并进行符合规则的子串循环查找。
while(m.find())
{
//用于获取匹配后结果。
System.out.println(m.group());
System.out.println(m.start()+"...."+m.end());
}
}
【java中正则表达式概述】相关文章:
JAVA正则表达式语法大全03-29
Java中的动态代码编程03-05
在Java中执行JavaScript代码04-01
java程序中如何调用linux命令03-29
Java中类的设计技巧有哪些03-04
Oracle正则表达式汇集03-28
JAVA和.NET开发过程中的区别04-27
java中File类有哪些使用方法03-14