正则表达式的语法,常用符号,贪婪匹配?

一、什么是正则表达式?

  • 正则表达式(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或一个

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值