表达式 描述
定位符
^ 匹配字符串的开始位置。在 [] (方括号)中使用时,表示不匹配 [] 中的字符集合。要匹配 ^ 字符,请使用 \^
$ 匹配字符串的结尾位置。只有设置了 RegExp 对象的 Multiline 属性,才会匹配 \n \r 。要匹配 $ 字符,请使用 \$
\b 匹配一个单词的边界,即字与空格间的位置
\B 非单词边界匹配
数量表示
? 匹配前面的子表达式零次或一次。要匹配 ? 字符,请使用 \?
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*
| 或运算符,指明两项之间匹配任意一个。要匹配 | ,请使用 \|
{m} 匹配前面的表达式m个
{m,} 匹配前面的表达式最少m个
{m,n} 匹配前面的表达式最少m个,最多n个
字符
. 匹配除换行符 \n 以外的任何单个字符。要匹配 . 字符,请使用 \.
\ 转义字符
\w 匹配任何字母数字,包括下划线(等价于 [A-Za-z0-9_]
\W 匹配任何非字母数字以及下划线(等价于 [^A-Za-z0-9_]
\d 匹配任何数字
\D 匹配任何非数字
\s 匹配任何空白字符,包括空格、制表符等
\S 匹配任何非空白字符
[abc] 匹配集合中包含的任一字符
[^abc] 匹配任何不在集合中的字符
[a-z] 匹配指定范围内的任意字符
分组和引用
(expression) 匹配括号里的整个表达式
(?:expression) 匹配括号里的整个字符串但不获取匹配结果,拿不到分组引用
\num 对前面所匹配分组的引用。比如 (\d)\1 可以匹配两个相同的数字, (a)\1 会匹配到 aa (a)(b)\1\2 会匹配到 abab
断言
(?=) 正向预查
(?!) 正向否定预查
(?<=) 反向预查
(?<!) 反向否定预查

正则表达式的修饰符用于指定额外的匹配策略,格式如下:

/pattern/flags
/.../i
/.../g
/.../m
修饰符描述
iignore - 不区分大小写
gglobal - 全局匹配
mmulti line - 多行匹配
s. 匹配符会匹配 \n 换行符,默认不匹配
x忽略空格
e配合函数preg_replace()使用,可以把匹配来的字符串当作正则表达式执行。
A强制从目标字符串开头匹配,相当于元字符^。
Z强制以目标字符串结尾匹配,相当于元字符$。
D模式中$仅匹配目标字符串结尾,不可与换行符\n匹配,无它可以匹配换行符结尾的字符串。
U只匹配最近的一个字符串;不重复匹配。

Java - Pattern 类

Java 语言中使用正则表达式,需要借助 Pattern 类:

public final class Pattern implements java.io.Serializable {
	...

Pattern 类用于创建一个正则表达式,通过两个静态方法调用私有构造器创建:

public static Pattern compile(String regex) {
 return new Pattern(regex, 0);
public static Pattern compile(String regex, int flags) {
 return new Pattern(regex, flags);

第一个参数是正则表达式,第二个参数是匹配模式(一个16进制的标识,Pattern 中定义的常量),对应上面的 修饰符

下面分别举例说明:

1:Pattern.CASE_INSENSITIVE 等同于修饰符 i: 不区分大小写。

2:m 可以匹配多行字符,即字符串中包括换行也可以,如: 字符串 ”bacd\nabde\nabgh",匹配规则:/ab/ ,没有匹配字符串,规则:/ab/m 可以匹配到第二行,第三行其实也是相符的,但单加上m只匹配到第一条,在python中使用re.findall就匹配全部,这个参数在此函数中不起作用。

3:g 全局匹配,上面规则改成:/ab/mg 就会匹配所有符合条件的字符,无论多少行,上面例子可以匹配后两行,python无些参数,本身就是全局搜索。

4:s 可以匹配换行符。如: 字符串 ”bacd\nabde\nabgh",re.findall(‘cd.’,s),没有匹配字符串,改成:re.findall(‘cd.’,s,re.S),就可以匹配’cd\n’,也就是加了这个修正符,可以将\n视为一个换行符号,否则将视为普通字符。

5:X,忽略模式中空格,如: 字符串 ”bacd\nabde\nabgh",re.findall(’ c d’,s),没有匹配的字符串,改成:re.findall(’ c d’,s,re.X),就和’cd\n’中的cd匹配成功。

6:A 强制从头开始匹配。如: 字符串 ”bacdefg", /ac/gi能匹不个字符,因为不是ac开头的,python中的re.A参数表示的是ascii码,在python中本身就是从头搜索的,所以无些参数。

7:Z 强制结尾匹配,/ab/Z,只能匹配字符串“efgab",而不能匹配"abcdef"因为不是以ab结尾的,python中fqhx无此参数。

8:D 不可匹配结尾的换行符。/ef$/D不能匹配"abcdef\n",而只能匹配"abcdef",去除/D修正符,可以匹配两个字符串。

9:U 只匹配最近一个字符串,也就是第一次出现的,python中的re.search()本身就是搜索到第一次的,在python中re.U是指指定的目标串是Unicode字符串。

常用正则表达式(持续完善。。。)

匹配 .png 结尾的图片

\.png$

判断密码只能包含英文和数字

^[A-Za-z0-9]+$
                                    正则表达式匹配文本中包含换行符等空白字符如何匹配使用[\s\S]匹配任意字符,而不是使用“.”使用s单行修饰模式,例:$pattern = '#abc.*?def#s'; //能匹配abc换行def使用\s*匹配换行和空格,php里\s能匹配空白字符,含换行 php里的中文使用 [\x7f-\xff]表示,因此。正则表达式如何匹配多个换行符要匹配3到10个之间的,{}不能用,有简便的写法吗,要尽可...
一文掌握开发利器:正则表达式
正则表达式具有伟大技术发明的一切特点,它简单、优美、功能强大、妙用无穷。对于很多实际工作来讲,正则表达式简直是灵丹妙药,能够成百倍地提高开发效率和程序质量。
1. 正则常见规则
1.1 字符匹配
			[0-9]。表示是一位数字。
			[^0-9]。表示除数字外的任意字符。
			[0-9a-zA-Z_]。表示数字、大小写字母和下划线。
			[^0-9a-zA-Z_]。非单词字
                                    regex:[a|e|s]  result:结果就是匹配字符a、e、|三个字符,这个跟(a|e|s)有区别的,区别就是(a|e|s)匹配的是a、e、s三个字符的随意一个,三个中的任意一个,这是的|是元字符!]等,在[]内的字符都是字符,不是元字符,比如“0-9”、“a-z”这中间的“-”就是连接符号,表示范围的元字符,如果写成[-(3)大括号{}:匹配次数,匹配在它之前表达式匹配出来的元素出现的次数,{n}出现n次、{n,}匹配最少出现n次、{n,m}匹配最少出现n次,最多出现m次。
                                    模式修正符模式修正符 -- 解说正则表达式模式中使用的修正符说明  下面列出了当前在 PCRE 中可能使用的修正符。括号中是这些修正符的内部 PCRE 名。修正符中的空格和换行被忽略,其它字符会导致错误。i(PCRE_CASELESS)如果设定此修正符,模式中的字符将同时匹配大小写字母。m(PCRE_MULTILINE)默认情况下,PCRE 将目标字符串作为单一的一“行”字符所组成的(甚至其中包...
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。如A*代表 A 可在字符串中出现 0 次或多次。限定修饰符有 * 、 + 、 ? 、 {n} 、 {n,} 和 {n,m} 。
限定修饰符
			匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
			匹配前面的
                                    正则表达式g修饰符:g修饰符用语规定正则表达式执行全局匹配,也就是在找到第一个匹配之后仍然会继续查找。语法结构:构造函数方式:new RegExp("regexp","g")对象直接量方式:/regexp/g浏览器支持:IE浏览器支持此元字符。火狐浏览器支持此元字符。谷歌浏览器支持此元字符。实例代码:实例一:var str="this is an antzone good";var reg=/an...
		String c="具体规则";// 建立规则
		boolean n=s.matches(c);//对比第二种:boolean bool = Pattern.matches("\\w+","hello abc");//第一参是规则,第二参为要匹配的字符串第三种:Patter...