ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

很全的正则表达式用法

2021-02-25 13:59:06  阅读:194  来源: 互联网

标签:regex 字符 匹配 String 正则表达式 Pattern 用法 很全 表达式


转载: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 = “(?

标签:regex,字符,匹配,String,正则表达式,Pattern,用法,很全,表达式
来源: https://blog.csdn.net/snail_bi/article/details/114078600

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有