怎么用?
实例
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
简便实例(三合一)
boolean b = Pattern.matches("a*b", "aaaaab");
常见符号(转义字符要双转)
符号 | 符号解释以及使用方法 |
---|---|
\d | 数字(0-9) |
\D | 非数字 |
\s | 空白字符(\t\n\x0B\f\r) |
\S | 非空白字符 |
\w | 大小写字母、数字、下划线 |
\W | \w对立面 |
* | 至少出现0次 |
+ | 至少出现1次 |
. | 匹配除了换行符和空字符串之外所有 |
? | 出现0次或者1次 |
{n} | 出现n次 |
{n,} | 至少出现n次 |
{n,m} | 出现n-m次 |
^ | 以什么开头 例如:^a 以a开头 。否 例如:[^0-9] 不出现0-9 |
$ | 以什么结尾 例如:a$ 以a结尾 |
常用的正则表达式
表达式 | 解释 |
---|---|
[u4e00-u9fa5] | 匹配汉字 |
[^\x00-\xff] | 双字节字符 |
[\u4e00-\u9fa5_a-zA-Z0-9_]{4,10} | 匹配中文、英文字母、数字和下划线(4到10位) |
[\u4e00-\u9fa5_a-zA-Z0-9]+$ | 匹配中文、英文字母、数字和下划线(长度随意) |
ps:由于代码冲突, 接下来不使用表格。
* 部分邮箱的正则表达式
* ^[a-zA-Z0-9][\\w.-]*@[\\w.-]*\\.([a-zA-Z]+${2,3})
* 包含是数字、汉子、字母、下划线、但不以下划线结尾的正则表达式(伪变量)
* ^(?!_)(?!.*?_$)[a-zA-Z0-9_\\u4e00-\\u9fa5]+$
* 手机号码的正则表达式(不严谨)
* ^[1]([3-9])[0-9]{9}$
* QQ号的正则表达式
* [1-9][0-9]{5,11}
* PS:正则表达式是规则的”化身“,根据规则写正则表达式。
补充
从混乱的文字中提取我想要的东西(爬取数据后的清洗)
String info = "蛇年大吉的舒适度8615155758979圣诞节活动时间的时候15155758978是见好就收地方黄金时代机会15155758977";
Pattern pattern = Pattern.compile("(86)?[1][3-9]([0-9]{9})");// (86)出现与否都可、1开头,第二位是3-9,剩下9位是数字
Matcher matcher = pattern.matcher(info);
while (matcher.find()) { // find查找与正则匹配的下一个子序列
String phone = matcher.group(); // group返回所find查找所匹配的子序列
System.out.println("爬取一个手机号:" + phone);
}