一、什么是正则表达式?
- 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等
二、正则在Java中和JavaScript中的区别?
1).javascript正则表达式创建有两种方法:
a.显式创建:
var re = new RegExp(“正则表达式模式串”);
re.test(要校验或处理的源字符串);
b.隐式创建:
var re = /正则表达式模式串/;
要校验或处理的源字符串.match(re);
2).分组捕获对象引用方式不同
javascript也是使用”()”进行分组,但是捕获对象用RegExp对象的 1到 1 到 99来引用捕获对象。
三、常用符号及其含义
表1:表示次数的符号
符号 | 含义 | 例子 | 解释 |
---|---|---|---|
* | 0次或多次 | [0-9]* | 匹配以任意个数字开始的字符串 |
+ | 1次或者多次 | [0-9]+ | 匹配以1个或者多个数字开始的字符串 |
? | 0次或者1次 | [0-9]? | 匹配以0个或者1个数字开始的字符串 |
{n} | N次 | [0-9]{N} | 匹配以N个数字开始的字符串 |
{n,m} | n到m次 | [0-9]{M,N} | 匹配以n个到m个数字开始的字符串(包括n和m) |
表2:常用符号
符号 | 等价正则 | 含义 | 例子 | 解释 |
---|---|---|---|---|
\d | [0-9] | [匹配任何一个数字 | \d\d | 匹配两个数字组成字符串 |
\D | [^0-9] | 不匹配任何一个数字 | \D | 匹配除数字以外的字符串 |
\s | [\n\t\f\r] | 匹配任何空格字符 | a\sb | 匹配a和b之间有任何空格字符的情况 |
\S | [^\n\t\f\r] | 不匹配任何空格字符 | a\Sb | 匹配a和b之间没有任何空格字符的情况 |
\b | 匹配单词边界 | \btest | 匹配以test开始的字符串 | |
\B | 不匹配单词边界 | \Btest | 匹配不以test开始的字符串 | |
\ | 转义字符 | \\ | 匹配\ |
表3:其他符号
符号 | 含义 | 例子 | 解释 |
---|---|---|---|
[…] | 匹配括号中的任意 一个字符 一 个 字 符 | [123] | 匹配1或2或3 |
[.-.] | 匹配从.到.之间的任意 一个字符 一 个 字 符 | [1-5] | 匹配1或2或3… |
[^…] | 不匹配括号中的任何 一个字符 一 个 字 符 | [^123] | 匹配除123之外的任意字符 |
| | 匹配|两边的任何 一个字符 一 个 字 符 | a|b | 匹配a或b |
. | 匹配除\n之外的任何 一个字符 一 个 字 符 | a. | 匹配以a开头的任意字符(a1,aa,ae….) |
^ | 匹配以什么开头的字符串 | ^135 | 匹配以135开始的任意字符串 |
$ | 匹配以什么结尾的字符串 | 8888$ | 匹配以8888结尾的任意字符串 |
() | 对正则表达式进行分组或者匹配子串 | ([0-9]{1})? | 匹配一个数字出现1次或0次 |
四、常用正则表达式
- 一个或多个汉字
- ^[\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)?$
- 一个英文和数字
- ^[A-Za-z0-9]+$
- 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
- ^[a-zA-Z]\w{5,17}$
- 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间)
- ^(?=.\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$
更多请参考史上最全常用正则表达式大全
五、正则表达式贪婪与非贪婪模式
如:String str=”12c3b3”;
Patter p=”12.*3”;
贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:12c3b3(12.*3)。
非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:12c3(12.*3)。
默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。 默 认 是 贪 婪 模 式 ; 在 量 词 后 面 直 接 加 上 一 个 问 号 ? 就 是 非 贪 婪 模 式 。
量词即:
{m,n}:m到n个
*:任意多个
+:一个到多个
?:0或一个