Regex

正则表达式笔记

记录一些用过、写过的正则表达式,以 JAVA 环境为主


字母、数字、下划线

// java
String reg = "[a-zA-Z0-9_]+";
// php
$reg= '/^\w+$/i';

大、小写字母、数字、点 “.” 、连字符 “-” 、下划线 “_” 、空格

// java
String reg = "[\\w-.\\s]+";

适用于文件名、邮箱帐号名……

邮箱地址

// php
$reg= '/[\w\-]+@\w+\.\w+/';
$reg= '/^[\w\.\-]+@[\w\-]+\.\w+$/i';
$reg= '/[\w\.\-]+@[a-z0-9\-]+\.(com|cn)/';

大、小写字母、数字

// java
String reg = "^[a-zA-Z0-9]{6,16}$";
	// 6 至 16 位
// php
$reg= '/[^a-z0-9]/i';

常用于密码

中文字符集(unicode)

// java
String reg = "[\\u4E00-\\u9FA5]+";

全部由空格组成

// java
String reg = "^ {1,}$";
String reg = "\\s+";

QQ号码

// java
String reg = "[1-9]\\d{4,14}";

由非 0 开头的 5 ~ 15 位数字组成

手机号码

// java
String reg = "1[34578]\\d{9}";
	// 由 1 开头,第二位数是 3、4、5、7、8 中的一位,总共 11 位
// php
$reg= '/^1\d{10}$/i';
	// 1 开头的 11 位数字

MAC 地址

只允许:数字、A - F、连字符、冒号、空格、点号、逗号,这几种字符出现

(还可以进一步规范)

// java
String reg = "[\\s\\S]*[^A-F0-9\\-: \\.,][\\s\\S]*";
// php
$reg= '/[^a-f0-9\-\:\s\,]/i';

银行卡密码

// java
String reg = "^[0-9]{6}$";
String reg = "[0-9]{6}";
String reg = "\\d{6}";
	// 6 位数字

身份证号码

// java
String reg = "(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9|X])";

总共 18 位,6 位数字代表地区,4 位数字代表年,2 位数字代表月,2 位数字代表日期, 3 位数字代表个人,最后一位可能是数字也可能是 X

(还可以进一步规范,使得符合身份证编码规范)

路径

// java
// 用于验证 LINUX 系统下的路径有效性的正则
public static final Pattern LINUX_PATH_PATTERN =
    Pattern.compile("(/([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255}/)*([a-zA-Z0-9][a-zA-Z0-9_\\-]{0,255})|/)");

// 用于验证 WINDOWS 系统下的路径有效性的正则
public static final Pattern WINDOWS_PATH_PATTERN =
    Pattern.compile("(^[A-Z]:((\\\\|/)([a-zA-Z0-9\\-_]){1,255}){1,255}|([A-Z]:(\\\\|/)))");

Flume 的 Agent 配置文件中,taildir source 使用正则匹配多个 log 文件

 # .*log 是正则表达式;这里不能写成 *.log 的形式(通配符)
 a1.sources.r1.filegroups.f1 = /opt/lagou/servers/hive-2.3.9/logs/.*log

在网页源码中匹配列表

// php
$reg= "/<li>(.*)<\/li>/i";