正则表达式
来源:互联网 发布:卫生网络直报系统网址 编辑:程序博客网 时间:2024/05/29 19:54
符合一定规则的表达式。
作用:用于专门操作字符串
特点:用一些特定的符号来表示一些代码操作。这样就简化了书写.
所以学习正则表达式,就是在学习一些特殊符号的使用。
好处:可以简化对字符串的复杂操作
弊端:符号定义越多,正则越长,阅读性越差
组:用小括号标示,每定义一个小括号,就是一个组,而且有自动编号,从1开始。
只要使用组,对应的数字就是使用该组的内容。别忘了,数组要加\\。
(aaa(wwww(ccc))(eee))技巧,从左括号开始数即可。有几个左括号就是几组。
注意:正则表达式中的反斜杠会一对对出现
--------------------------------------------------------------------------------------------------------------
具体操作功能:
1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
2.切割:String split()
3.替换:String replaceAll()
4.获取:将字符串中的符合规则的子串取出
操作步骤:
1.将正则表达式封装成对象。
2.让正则对象和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出。
按照叠词完成切割:为了可以让规则的结果被重用
可以将规则封装成一个组。用()完成。租的出现都有编号。
从1开始。想要使用已有的组可以通过 \n(n就是组的编号)的形式来获取
例子:
(erkkrttczzzo)
regex("(.)\\1+") (.)代表第一个是任意字符 \\1 第二位判断是否拿第一个的结果,不匹配就往下走,继续。
要想获取组(.) 里的字符,用$1 可以将叠词的字符替换成单个字母 zzzz->z
---------------------------------------------------------------------------------------------------------------
常用规则:(查询String matches 正则表达式)
[abc]或[a-z] 只能匹配一个字符,并且只能是中括号里的某一个字符,第二个就继续写在后面
[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]
(减去)-------------------------------------------------------------------------------------------------
匹配例子:
对QQ号码进行校验
要求:5-15 0不能开头,只能是数字
class Demo
{
public static void main(String[] args)
{
}
public static void checkQQ()
{
String qq="123467";
String regex="[1-9] [0-9] [4,14]"; //凡是看到regex就知道定义了规则
boolean fag=qq.matches(regex); //告知此字符串是否匹配给定的正则表达式
if(flag)
System.out.println(qq+"...OK");
else
System.out.println(qq+"...不匹配")
}
}
---------------------------------------------------------------------------------------------------------------
获取例子:
import java.util.regex.*
class RegexDemo
{
public static void main(String[] args)
{
}
public static void getDemo()
{
String str="ming tian fang jia ,dada";
String reg="\\b[a-z]{4}\\b"; // \\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());//获取字符串的开头结尾角标
}
}
}
注意:
因为规则只定义了前4个和边界,那么匹配到tian的时候,不符合规则,matcher会返回flase
由于使用的是同一个匹配器,那么m.find()第二次的时候,直接从tian开始,
会出现不显示ming的情况
-------------------------------------------------------------------------------------------
正则表达式使用思路:
1.如果只想知道该字符是否对是错,使用匹配
2.想要将已有的字符串变成另一个字符串,替换
3.想要按照自定的字符串变成多个字符串,切割。获取规则以外的子串
4.想要拿到符合需求的字符串子串,获取。获取符合规则的子串
-----------------------------------------------------------------------------------------
网页爬虫(蜘蛛)
class Regex
{
public static void main(String[] args)
{
getMails();
}
//获取网页地址
public static void getNet() throws Exception
{
Url=new URL("http://www.baidu.com");
URLConnection conn=url.openConnection();
BufferedReader bufIn=new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line=null;
String mailreg="\\w+@\\w+(\\.\\w+)+";
Pattern p=Pattern.complie(mailreg);
while((line=bufIn.readLine())!=null)
{
Matcher m=p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
/*
获取指定文档中的邮件地址
使用获取功能。Pattern Matcher
*/
public static void getMails() throws Exception
{
BuffereReader bufr=new BufferReader(new FileReader("mail.txt"));
String line=null;
String mailreg="\\w+@\\w+(\\.\\w+)+";
Pattern p=Pattern.complie(mailreg);
while((line=bufr.readLine())!=null)
{
Matcher m=p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
}
}
0 0
- 【正则表达式】正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 正则表达式
- 哪 里 能 买 到 求 身 份 证 正 反 面p1
- 哪 里 能 买 到 求 个 身 份 证 正 反 面 图e66
- 哪 里 能 买 到 身 份 证 正 反 面 图m
- Fragment中调用startActivityForResult()返回值的实现
- 哪 里 能 买 到 身 份 证 正 反 面 加 手 持 照wv
- 正则表达式
- 黑马程序员——正则表达式
- intersection of circle and sector
- iOS开发笔记16--第三方登陆
- Google IO 2015
- iOS开发笔记17-SEL (@selector) 原理及使用总结(一)
- 黑马程序员——网页爬虫(网页蜘蛛)
- iOS开发笔记18--SEL (@selector) 原理及使用总结(二)
- 黑马程序员——反射Reflection