正则表达式实现与或非关系【推荐】
写一个正则表达式,要求匹配字符串同时满足条件A和条件B
我们可以先写两个子表达式PatternA和PatternB,分别校验条件A和条件B。然后结合成一个新的表达式
(?=PatternA)PatternB
例如,当在Windows Server上修改用户密码时,一般要求满足以下要求:
1. 6到256个字符
2. 包括以下四类字符中的至少三类: 数字/小写字母/大写字母/其他字符
3. 其它无法用正则表达式校验的规则(例如最短密码修改时间)
我们就可以用以下正则表达式来校验密码的合法性(其中蓝色和绿色部分分别为PatternA和PatternB):
(?=^.{6,255}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*
•写一个正则表达式,要求匹配字符串满足条件A,但不可满足条件B
我们可以先写两个子表达式PatternA和PatternB,分别校验条件A和条件B。然后结合成一个新的表达式
(?!PatternB)PatternA
例如,Windows Server的机器名一般要求满足以下要求(比微软官方要求有所简化):
1. 2到15个字符。只能包括: 数字/小写字母/大写字母/减号
2. 不能全部为数字
我们就可以用以下正则表达式来校验机器名的合法性(其中蓝色部分分别为PatternB,绿色部分为PatternA):
^(?!^\d*$)([a-zA-Z0-9-]{2,15})$
•写一个正则表达式,要求匹配字符串或者满足条件A或者满足条件B
我们可以先写两个子表达式PatternA和PatternB,分别校验条件A和条件B。然后结合成一个新的表达式
(PatternA|PatternB)
例如在非必须填的电话号码域中,用户可以输入一个合法的电话号码,也可以留空
我们就可以用以下正则表达式来校验机器名的合法性(其中蓝色部分分别为PatternB,绿色部分为PatternA):
(^$|\d{7,16})
注意:行起始符(^),行终止符($)和非贪婪标志(?)在这里的使用非常重要。
相关推荐
-
PHP 正则表达式效率 贪婪、非贪婪与回溯分析(推荐)
先扫盲一下什么是正则表达式的贪婪,什么是非贪婪?或者说什么是匹配优先量词,什么是忽略优先量词? 好吧,我也不知道概念是什么,来举个例子吧. 某同学想过滤之间的内容,那是这么写正则以及程序的. $str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪 看起来,好像没什么问题,其实则不然.若 $str = '<script<script>alert(document.cookie)</script&
-
正则表达式之 贪婪与非贪婪模式详解(概述)
1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: "{m,n}"."{m,}"."?"."*"和"+". 在一些使用NFA引擎的语言中,在匹配优先量词后加上"?",即变成属于非
-
小议正则表达式效率 贪婪、非贪婪与回溯
先扫盲一下什么是正则表达式的贪婪,什么是非贪婪?或者说什么是匹配优先量词,什么是忽略优先量词? 好吧,我也不知道概念是什么,来举个例子吧. 某同学想过滤之间的内容,那是这么写正则以及程序的. 复制代码 代码如下: $str = preg_replace('%<script>.+?</script>%i','',$str);//非贪婪 看起来,好像没什么问题,其实则不然.若 复制代码 代码如下: $str = '<script<script>alert(docume
-
PHP之正则表达式捕获组与非捕获组(详解)
在项目开发过程中正则表示经常会用到,可以说会正则表达式是每个程序员最基本的要求,初学者在刚接触正则表达式都感到很吃力.最近看到一位朋友的博客写的<PHP正则表达式>获益颇多,在章节对通配符以及捕获数据非常感兴趣.这两章节刚好也涉及到了正则表达式的捕获组和非捕获组的内容,以此来分析这方面的内容 我们知道,在正则表达式下(x) 表示匹配'x'并记录匹配的值.这只是比较通俗的说法,甚至说这是不严谨的说法,只有()捕获组形式才会记录匹配的值.非捕获组则只匹配,不记录. 捕获组: (pattern) 这
-
PHP正则表达式之捕获组与非捕获组
今天遇到一个正则匹配的问题,忽然翻到有捕获组的概念,手册上也是一略而过,百度时无意翻到C#和Java中有对正则捕获组的特殊用法,搜索关键词有PHP时竟然没有相关内容,自己试了一下,发现在PHP中也是可行的,于是总结一下,分享的同时也希望有大神和细心的学习者找到我理解中出现的问题. 什么是捕获组 捕获组语法: 字符 描述 示例 (pattern) 匹配pattern并捕获结果,自动设置组号. (abc)+d 匹配abcd或者abcabcd (?<name>pattern) 或 (?'name'
-
php正则表达式中贪婪与非贪婪介绍
一.贪婪与非贪婪 什么叫贪婪,比如说要从字符串中<td>面包一</td><td>面包二</td>吃面包,本来你只可以吃面包一,可是你贪心,于是就把第一个<td>到最后一个</td>里面的两个面包取出来了,你想多吃点,非贪婪也就是你不贪吃了,就只吃面包一. 我们来看看正则里面是怎么贪婪的 <?php $str = '<td>面包一</td><td>面包二</td>'; preg_ma
-
[正则表达式]贪婪模式与非贪婪模式
复制代码 代码如下: /** ** author: site120 ** function : get script part from html document **/ var loadJs = function(str , delayTime) { var delayTime = delayTime || 100; var regExp_scriptTag = new RegExp("<\\s*sc
-
正则表达式实现与或非关系【推荐】
写一个正则表达式,要求匹配字符串同时满足条件A和条件B 我们可以先写两个子表达式PatternA和PatternB,分别校验条件A和条件B.然后结合成一个新的表达式 (?=PatternA)PatternB 例如,当在Windows Server上修改用户密码时,一般要求满足以下要求: 1. 6到256个字符 2. 包括以下四类字符中的至少三类: 数字/小写字母/大写字母/其他字符 3. 其它无法用正则表达式校验的规则(例如最短密码修改时间) 我们就可以用以下正则表达式来校验密码的合法性(其中蓝
-
JS中使用正则表达式g模式和非g模式的区别
先给大家说下js正则表达式中的g到底是什么意思 g是global的缩写啊! 就是匹配全部可匹配结果, 如果你不带g,在正则过程中,字符串是从左至右匹配的,如果匹配成功就不再继续向右匹配了,如果你带g,它会重头到尾的把正确匹配的字符串挑选出来 例如: var str = 'aaaaaaaa' var reg1 = /a/ var reg2 = /a/g str.match(reg1) // 结果为:["a", index: 0, input: "aaaaaaaa"]
-
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
本文实例讲述了python 正则表达式贪婪模式与非贪婪模式原理.用法.分享给大家供大家参考,具体如下: 之前未接触过正则表达式,今日看python网络爬虫的源码,里面一行正则表达式匹配的代码初看之下,不是很理解,代码如下: myItems = re.findall('<div.*?class="content".*?title="(.*?)">(.*?)</div>',unicodePage,re.S) ".*?"这种匹配
-
js正则表达式之前瞻后顾与非捕获分组
目录 前瞻后顾与捕获分组的结合使用 捕获分组与非捕获分组 前瞻.后顾与负前瞻.负后顾 总结 前瞻后顾与捕获分组的结合使用 在现实的应用场景中,捕获分组或非捕获分组通常被限制在前瞻后顾条件内,举例来说,对数字12345678格式化,结果为12,345,678.其正则实现如下: let formatSum = '12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',') 捕获分组与非捕获分组 为了理解前瞻与后顾,首先要先理解捕获分组与非捕获分组 在js中, (
-
正则表达式的基本语法汇总篇(推荐!)
目录 1.正则表达式的基本语法 1.1两个特殊符号 ‘^’ 和 ‘$’ 1.2 出现次数的表示符号 * + ? 1.3 指定出现次数的范围 {} 1.4 “或” 操作 | 1.5 替代任意字符的 . 英文句号 1.6 方括号的使用 [] 1.7 小括号 () 的作用 1.7.1 限定量词作用的范围 1.7.2 分支结构 1.7.3 引用分组 1.7.4提取数据 1.7.5替换 1.7.6反向引用 1.7.7非捕获分组 1.7.8 操作实例 2. 常用的正则表达式 参考文档 总结 1.正则表达式的
随机推荐
- 详解vue渲染从后台获取的json数据
- 探寻Android的线程问题
- javascript中的Base64、UTF8编码与解码详解
- Node.js设置CORS跨域请求中多域名白名单的方法
- JS跳转手机站url的若干注意事项
- asp.net 下拉列表无级数据绑定实现代码
- 实现基于事件通知的.Net套接字
- C++Zip压缩解压缩示例(支持递归压缩)
- 关于Android WebView的loadData方法的注意事项分析
- onclick和onblur冲突问题的快速解决方法
- 表单元素事件 (Form Element Events)
- java+jsp+struts2实现发送邮件功能
- c#保存窗口位置大小操作类(序列化和文件读写功能)
- mysql如何让自增id归0解决方案
- javascript 特性检测并非浏览器检测
- apache documentroot指向htcdoc之外提示403错误的解决方法
- android IntentService实现原理及内部代码分享
- iOS11 WKWebView问题汇总
- SpringBoot 中常用注解及各种注解作用
- JDK 7 新特性小结实例代码解析