很全的正则表达式用法

转载:https://www.cnblogs.com/gisblogs/p/3955648.html

1。^/d+     / / 匹 配 非 负 整 数 ( 正 整 数 + 0 ) 2 。 [ 0 − 9 ] ∗ [ 1 − 9 ] [ 0 − 9 ] ∗   //匹配非负整数(正整数 + 0) 2。^[0-9]*[1-9][0-9]*   //匹配非负整数(正整数+0)2。[0−9]∗[1−9][0−9]∗  //匹配正整数
3。^((-/d+)|(0+))     / / 匹 配 非 正 整 数 ( 负 整 数 + 0 ) 4 。 − [ 0 − 9 ] ∗ [ 1 − 9 ] [ 0 − 9 ] ∗   //匹配非正整数(负整数 + 0) 4。^-[0-9]*[1-9][0-9]*   //匹配非正整数(负整数+0)4。−[0−9]∗[1−9][0−9]∗  //匹配负整数
5。^-?/d+         / / 匹 配 整 数 6 。 / d + ( / . / d + ) ?     //匹配整数 6。^/d+(/./d+)?     //匹配整数6。/d+(/./d+)?  //匹配非负浮点数(正浮点数 + 0)
7。^(([0-9]+/.[0-9][1-9][0-9])|([0-9][1-9][0-9]/.[0-9]+)|([0-9][1-9][0-9]))     / / 匹 配 正 浮 点 数 8 。 ( ( − / d + ( / . / d + ) ? ) ∣ ( 0 + ( / . 0 + ) ? ) )   //匹配正浮点数 8。^((-/d+(/./d+)?)|(0+(/.0+)?))   //匹配正浮点数8。((−/d+(/./d+)?)∣(0+(/.0+)?))  //匹配非正浮点数(负浮点数 + 0)
9。^(-(([0-9]+/.[0-9][1-9][0-9])|([0-9][1-9][0-9]/.[0-9]+)|([0-9][1-9][0-9])))     / / 匹 配 负 浮 点 数 10 。 ( − ? / d + ) ( / . / d + ) ?   //匹配负浮点数 10。^(-?/d+)(/./d+)?   //匹配负浮点数10。(−?/d+)(/./d+)?  //匹配浮点数
11。1+     / / 匹 配 由 26 个 英 文 字 母 组 成 的 字 符 串 12 。 [ A − Z ] +   //匹配由26个英文字母组成的字符串 12。^[A-Z]+   //匹配由26个英文字母组成的字符串12。[A−Z]+  //匹配由26个英文字母的大写组成的字符串
13。2+     / / 匹 配 由 26 个 英 文 字 母 的 小 写 组 成 的 字 符 串 14 。 [ A − Z a − z 0 − 9 ] +   //匹配由26个英文字母的小写组成的字符串 14。^[A-Za-z0-9]+   //匹配由26个英文字母的小写组成的字符串14。[A−Za−z0−9]+  //匹配由数字和26个英文字母组成的字符串
15。^/w+     / / 匹 配 由 数 字 、 26 个 英 文 字 母 或 者 下 划 线 组 成 的 字 符 串 16 。 [ / w − ] + ( / . [ / w − ] + ) ∗ @ [ / w − ] + ( / . [ / w − ] + ) +   //匹配由数字、26个英文字母或者下划线组成的字符串 16。^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+   //匹配由数字、26个英文字母或者下划线组成的字符串16。[/w−]+(/.[/w−]+)∗@[/w−]+(/.[/w−]+)+    //匹配email地址
17。3+://匹配(/w+(-/w+))(/.(/w+(-/w+)))(/?/S)?     / / 匹 配 u r l 18 。 匹 配 中 文 字 符 的 正 则 表 达 式 : [ / u 4 e 00 − / u 9 f a 5 ] 19 。 匹 配 双 字 节 字 符 ( 包 括 汉 字 在 内 ) : [ / x 00 − / x f f ] 20 。 应 用 : 计 算 字 符 串 的 长 度 ( 一 个 双 字 节 字 符 长 度 计 2 , A S C I I 字 符 计 1 ) S t r i n g . p r o t o t y p e . l e n = f u n c t i o n ( ) r e t u r n t h i s . r e p l a c e ( [ / x 00 − / x f f ] / g , " a a " ) . l e n g t h ; 21 。 匹 配 空 行 的 正 则 表 达 式 : / n [ / s ∣ ] ∗ / r 22 。 匹 配 H T M L 标 记 的 正 则 表 达 式 : / < ( . ∗ ) > . ∗ < / / / 1 > ∣ < ( . ∗ ) / / > / 23 。 匹 配 首 尾 空 格 的 正 则 表 达 式 : ( / s ∗ ) ∣ ( / s ∗   //匹配url 18。匹配中文字符的正则表达式: [/u4e00-/u9fa5] 19。匹配双字节字符(包括汉字在内):[^/x00-/xff] 20。应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^/x00-/xff]/g,"aa").length;} 21。匹配空行的正则表达式:/n[/s| ]*/r 22。匹配HTML标记的正则表达式:/<(.*)>.*<///1>|<(.*) //>/ 23。匹配首尾空格的正则表达式:(^/s*)|(/s*   //匹配url18。匹配中文字符的正则表达式:[/u4e00−/u9fa5]19。匹配双字节字符(包括汉字在内):[/x00−/xff]20。应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)String.prototype.len=function()returnthis.replace([/x00−/xff]/g,"aa").length;21。匹配空行的正则表达式:/n[/s∣]∗/r22。匹配HTML标记的正则表达式:/<(.∗)>.∗<///1>∣<(.∗)//>/23。匹配首尾空格的正则表达式:(/s∗)∣(/s∗)

  • 正则表达式用例
    • 1、^/S+[a-z A-Z]$ 不能为空 不能有空格 只能是英文字母
    • 2、/S{6,} 不能为空 六位以上
    • 3、^/d+$ 不能有空格 不能非数字
    • 4、(.*)(/.jpg|/.bmp)$ 只能是jpg和bmp格式
    • 5、^/d{4}/-/d{1,2}-/d{1,2}$ 只能是2004-10-22格式
    • 6、^0$ 至少选一项
    • 7、^0{2,}$ 至少选两项
    • 8、4{20,}$ 不能为空 二十字以上
    • 9、^/+?a-z0-9*@([a-z0-9]+(/.|/-))+[a-z]{2,6}$邮件
    • 10、/w+([-+.]/w+)@/w+([-.]/w+)/./w+([-.]/w+)([,;]/s/w+([-+.]/w+)@/w+([-.]/w+)/./w+([-.]/w+)) 输入多个地址用逗号或空格分隔邮件
    • 11、^(/([0-9]+/))?[0-9]{7,8}$电话号码7位或8位或前面有区号例如(022)87341628
    • 12、5+@[a-z A-Z 0-9 _]+(/.[a-z A-Z 0-9 _]+)+(/,[a-z A-Z 0-9 _]+@[a-z A-Z 0-9 _]+(/.[a-z A-Z 0-9 _]+)+)*$
    • 只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件
      
    • 13 ^/w+@/w+(/./w+)+(/,/w+@/w+(/./w+)+)* 上 面 表 达 式 也 可 以 写 成 这 样 子 , 更 精 练 。 1 4 / w + ( ( − / w + ) ∣ ( / . / w + ) ) ∗ / @ / w + ( ( / . ∣ − ) / w + ) ∗ / . / w + 上面表达式也可以写成这样子,更精练。 14 ^/w+((-/w+)|(/./w+))*/@/w+((/.|-)/w+)*/./w+ 上面表达式也可以写成这样子,更精练。14/w+((−/w+)∣(/./w+))∗/@/w+((/.∣−)/w+)∗/./w+

// 限定条件
final String CONDITION = “(?=.[a-z])(?=.[A-Z])(?=.*//d)”;

    // 允许出现的字符
     final String SPECIAL_CHAR = "[-A-Za-z0-9!$%&()/;<?{}//[//]^]";

    // 数量
     final String QUANTITY = "{8,16}"; 

1 楼的回复

(?=.[a-z]) 表示当前位置后面必须出现 .[a-z] 的字符,这个可以理解为必须出现小写字母。
或者可以理解为某一个字符间的缝隙必须满足的条件,这个仅仅作为条件判断并不能匹配任何字
符,因为这属于非捕获组中的环视(lookarround)零宽度匹配。

举个大家常见的例子:

表达式:Win(?=XP)
现有字符串 WinXP 和 WinNT,在应用这个表达式时前者能与之进行匹配,为什么呢?

当匹配器指示到 (?=XP) 时,也就是在 n 字母后面的缝隙,这个缝隙必须满足的
条件是:后面的字符必须是 XP,如果是的话,匹配成功,否则匹配失败。由于
(?=XP) 是匹配缝隙的,因此并不会把 XP 给匹配输出,而只输出了 Win 因此,这
个表达式的语义可以看作是:找到后面为“XP”字符所有的 Win。

假如,我们把表达式写成 Win(?=XP)(?=NT) 这样的话,那么这个语义是:找出后面
为“XP”并且为“NT”字符所有的 Win 可以想象,这是个
永远无法满足的匹配。(?=XP)(?=NT) 这个表示当前的缝隙必须同时满足的条件。

把这个表达式再改一下,改成 Win(?=.*XP)(?=.NT) 这个表示 Win 的后面必须出现
XP 与 NT,位置和顺序都是无关的(这主要是 .
的作用)。当然了这个表达式的效
率是比较低的,得向后进行两次断言。

如果字符串是 WincbaXPabcNT 这个字符串,当匹配指示器走到 n 后面的缝隙时开始
进行向后断言,首先对 .*XP 进行断言,很明显能将 cbaXP 匹配成功,这时第一个断
言完成,再对 .*NT 断言,可以看出 cbaXPabcNT 能与其匹配成功,这时第二个断言完
成,因此表达式 Win(?=.*XP)(?=.*NT) 能对 WincbaXPabcNT 进行匹配。

同理 WincbaNTabcXP 也是同样的效果。

如果能理解上面的这些,对于 (?=.[a-z])(?=.[A-Z])(?=.*//d) 这个的理应该不会
很难吧,这个只不过是必须同时满足三个条件。

这个表达式在开始部分就进行断言,即索引为 0 的地方,也就是第一个字符的前面的
缝隙,这个缝隙后面的字符必须满足 .[a-z] .[A-Z] .*//d 三个条件,也就是说
必后面必须出现至少一个小写字母、至少一个大写母、至少一个数字。

至于表达式 2 的使用,也就是 [ ] 内字符的转义需要注意一下。

^ 和 - 在 [ ] 结构的表达式中是有一定意义的。

[^abc] 表示除 abc 以外所有的字符,注意,这是放在最前面表示这个意思,
如果改成 [a^bc] 这个仅表示 a ^ b c 四个字符。如果需要匹配 ^ 这个字符
的话,千万不要把它放在第一个,如果一定要放在第一个的话,得使用转义符。

  • 在 [ ] 表示字符的范围,比如 [a-z] 表示 a 与 z 之间的 26 个字母,
    [a-zA-Z] 这个表示 a-z 和 A-Z 的 52 个字母。使用范围得注意了,如果写成
    [z-a] 的话,在 Pattern.compile 编译表达式时会对范围进行检查,这时会产
    生异常,因此在使用 - 范围时,后面的 Unicode 值必须大于等于前面的 Unicode
    值。

如果要匹配“-”的话,尽量不要把 - 这个放在字符之间,可以放在 [ ] 的两边。
比如 [-a-z] 这就能匹配 26 个小写字母和“-”了。当然了,我们也可以写成
[a-z-A-Z] 这个可以匹配 52 字母和“-”,但是这样很不直观,我们宁愿写成
[a-zA-Z-] 或者 [-a-zA-Z] 这样。

2:不以某某开头 ,比如不以www开头

Java code
public class Test {
public static void main(String[] args) {
String[] strs = { “abc1232”, “wwwadsf”, “awwwfas”, “wwadfsf”, “”, “ww”, " ", “www” };
String regex = “(?

上一篇:Java 中 split() 方法


下一篇:【Web前端基础知识】关于前端正则表达式基本用法(上)