美文网首页
JAVA之正则表达式

JAVA之正则表达式

作者: 你需要一台永动机 | 来源:发表于2018-09-07 16:12 被阅读34次

JAVA之正则表达式

正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

正则表达式语法

元字符 描述
\ 转义字符,例如"\n"匹配"\n"
^ 正则表达式的开头标志
$ 正则表达式的结尾标志
* 匹配零次或多次
+ 匹配一次或多次
? 匹配一次或零次
. 匹配任意字符
{n} 匹配n次
{n,} 至少匹配n次
{n,m} n<=m,最少匹配n次,最多匹配m次
x|y| 匹配x或y
[xyz] 字符集合。匹配所包含的任意一个字符
[^xyz] 负值字符集合。匹配未包含的任意字符
[a-z] 字符范围。匹配指定范围内的任意字符
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符
[a-zA-Z] 匹配a到z或Z
[a-z&&[^bc]] 匹配除了b和c之外的a到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 输入的结尾
备注1:?

当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。

备注2:\b
p("hello sir".matches("^h[a-z]{1,3}o\\b.*"));//true
p("hellosir".matches("^h[a-z]{1,3}o\\b.*"));//false

例子

场景 正则
一个或多个汉字 ^[\u0391-\uFFE5]+$
邮政编码 ^[1-9]\d{5}$
QQ号码 ^[1-9]\d{4,10}$
邮箱 ^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}.){1,3}[a-zA-z-]{1,}$
用户名(字母开头 + 数字/字母/下划线) ^[A-Za-z][A-Za-z1-9_-]+$
手机号码 ^1[3|4|5|8][0-9]\d{8}$
URL ^((http|https)://)?([\w-]+.)+[\w-]+([\w-.?%&=]*)?$
18位身份证号 ^(\d{6})(18|19|20)?(\d{2})([01]\d)([0123]\d)(\d{3})(\d|X|x)?$

代码

public static void main(String[] args) {
    // 要验证的字符串
    String str = "service@xsoftlab.net";
    // 邮箱验证规则
    String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}";
    // 编译正则表达式
    Pattern pattern = Pattern.compile(regEx);
    // 忽略大小写的写法
    // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(str);
    // 字符串是否与正则表达式相匹配
    boolean rs = matcher.matches();
    System.out.println(rs);
}

相关文章

网友评论

      本文标题:JAVA之正则表达式

      本文链接:https://www.haomeiwen.com/subject/nmvcgftx.html