正则

JS高级

只谈情不闲聊 提交于 2020-03-01 15:35:11
1. 正则表达式: 2. String中的正则API: 1. 正则表达式: 2. String中的正则API: 查找: 1. 查找一个固定的关键词出现的位置: var i=str.indexOf("关键词"[,starti]) 在str中从starti位置开始找下一个"关键词"的位置 如果省略starti,则默认从0位置开始向后找 返回: “关键词”第一字所处位置的下标 如果找不到,返回-1 问题: 只支持查找一个固定不变的关键词 2. 用正则表达式查找一个关键词的位置: var i=str.search(/正则/i); 在str中查找符合"正则"要求的敏感词 返回值: 关键词的位置 如果找不到,返回-1 问题: 正则默认区分大小的! 解决: 在第2个/后加后缀i,表示ignore,意为:忽略大小写 问题: 只能获得关键词的位置,不能获得关键词的内容 解决: match 3. match: 1. 查找一个关键词的内容和位置: var arr=str.match(/正则/i); 在str中查找符合"正则"要求的敏感词的内容和位置 返回值: 数组arr:[ "0":"关键词", "index": 下标i ] 如果找不到: 返回null 问题: 只能查找第一个关键词,不能查找更多关键词 2. 查找所有关键词的内容: var arr=str.match(/正则/ig) //g global

正则基础教程一些冷门的知识

扶醉桌前 提交于 2020-02-29 19:30:41
正则基础教程一些冷门的知识 正则引擎 正则分几种引擎也从是本书获得的知识点之一。 DFA 传统型NFA POSIX NFA NFA范围更广,例如 JAVA, PHP, Ruby, .NET... 你是看不起我javascript所以才不列入的吗? 使用DFA的是flex, MySQL, lex, awk大部分版本… 实话说,除了mysql,都没听过。不过不用在意! 两个引擎的区: NFA 更注重表达式 DFA 文本主导   通过书中里例子说,NFA 用表达式来匹配文本,而 DFA 是文本来匹配文表达式。当写好一个正则之后,NFA 是先检查表达式,同时检查文本是否匹配这个表达式。而 DFA 则是先扫描文本,然后处理表达式中的所有匹配可能,如果匹配失败,就将这条可能的线,淘汰。所以这里衍生一个概念就是回溯,NFA 有回溯,而 DFA 没有。 知识点   作为一个菜鸟,正则表达式一直是书到用时方恨少的角色。平时都是能抄则抄,不能抄的时候干着急,只能用 substr, indexOf, chatAt等等的方法实现功能,既不优雅也不够装逼。上网学习也都是菜鸟教程,W3school。然后下面说一下以上两个基础教程里没说到的知识点。   括号捕获与反向引用   当你在正则表达式里使用了 (),在表达式匹配时,它能记住或者说缓存括号内匹配的结果,从而可以拿到括号内的结果

正则基础 之 NFA引擎匹配原理

折月煮酒 提交于 2020-02-29 14:09:16
NFA 引擎匹配原理 1 为什么要了解引擎匹配原理 一个个音符杂乱无章的组合在一起,弹奏出的或许就是噪音,同样的音符经过作曲家的手,就可以谱出非常动听的乐曲,一个演奏者同样可以照着乐谱奏出动听的乐曲,但他 / 她或许不知道该如何去改变音符的组合,使得乐曲更动听。 作为正则的使用者也一样,不懂正则引擎原理的情况下,同样可以写出满足需求的正则,但是不知道原理,却很难写出高效且没有隐患的正则。所以对于经常使用正则,或是有兴趣深入学习正则的人,还是有必要了解一下正则引擎的匹配原理的。 2 正则表达式引擎 正则引擎大体上可分为不同的两类: DFA 和 NFA ,而 NFA 又基本上可以分为传统型 NFA 和 POSIX NFA 。 DFA Deterministic finite automaton 确定型有穷自动机 NFA Non-deterministic finite automaton 非确定型有穷自动机 Traditional NFA POSIX NFA DFA 引擎因为不需要回溯,所以匹配快速,但不支持捕获组,所以也就不支持反向引用和 $number 这种引用方式,目前使用 DFA 引擎的语言和工具主要有 awk 、 egrep 和 lex 。 POSIX NFA 主要指符合 POSIX 标准的 NFA 引擎,它的特点主要是提供 longest-leftmost 匹配

php正则

给你一囗甜甜゛ 提交于 2020-02-29 06:24:13
php 支持两种正则表达式的处理函数。 1.pcre (perl compatible regular expression)perl语言兼容的正则表达式 perl语言兼容的正则表达式函数一般以 preg_ 开头。 2.需要给模式加上定界符。(定界符:除字母,数字,反斜线 \,以外的任何字符都可以作为定界符,通常用 / 斜线) 3.由 原子 +特殊功能字符(元字符)+模式修正符组成。 原子{ 1.普通字符原子:大写小写字母,数字。 2.特殊字符原子:如‘ “+*等已经有特殊意义的字符需要当作一个原子的话必须用反斜线转义。 3.一些非打印字符原子:\r 回车 \n换行等格式控制符号 4.通用字符类型原子: 如\d任意十进制数字,\D任意非十进制数字字符。 \s匹配任意打印字符(空白字符)相当于[\f\n\r\t\v] ,\S 任意非打印字符相当于[^\f\n\r\t\v] \w匹配任何一个数字,字母,下划线字符,\W匹配任何一个非数字,字母,下划线字符 5.自定义原子表:如[df23fd] } 元字符:构建正则表达式的具有特殊含义的字符,修饰原子的:有 * + ?.| {n} {n,}{n,m} ^或\A匹配输入字符串的开始位置,$或者\Z 输入字符串结束位置 \b 匹配单词的边界。\B匹配单词边界以外的部分。[] [^] ()多个原子组成的大原子。 来源: https://www

Java中正则Matcher类的matches()、lookAt()和find()的区别

三世轮回 提交于 2020-02-29 03:49:17
在Matcher类中有matches、lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下: matches :整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回False。但是如果前面部分有匹配成功的,将移动下次匹配的位置(即find和matches共享匹配的位置)。 lookingAt :部分匹配,总是从第一个字符进行匹配,匹配成功了不再继续匹配,匹配失败了,也不继续匹配。 find :部分匹配,从当前位置开始匹配,找到一个匹配的子串,将移动下次匹配的位置。 reset:给当前的Matcher对象配上个新的目标,目标是就该方法的参数;如果不给参数,reset会把Matcher设到当前字符串的开始处。 使用示例代码来展示他们的区别更清晰明了: package net.oseye; import java.util.regex.Matcher; import java.util.regex.Pattern; public class IOTest { public static void main(String[] args){ Pattern pattern = Pattern.compile("\\d{3,5}"); String charSequence = "123-34345-234-00"; Matcher matcher =

linux实战(一)----日志的截取-----文本过滤器grep、文本流式编辑器sed、报表生成器awk的运用

不羁的心 提交于 2020-02-28 21:47:55
linux实战(一)----日志的截取-----文本过滤器grep、文本流式编辑器sed、报表生成器awk的运用 2015年12月25日 16:28:50 张小凡vip 阅读数 5404更多 所属专栏: linux基础与shell编程 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/q383965374/article/details/50394765 我们前面已经学习过 linux的性能查询(top),以及网络端口查询(netstat)命令等等。 怎么让我们查询到的信息按 我们需要的格式 显示生成。 就是我们本章 需要 学习练习的。 主要是grep,sed,awk3个命令的运用。 grep主要负责搜索 sed主要负责处理行 awk主要复杂处理列 我们在下一章的内容再来学习实例,如果用这几个命令来进行性能监控等。 grep 作用 grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。 grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 格式 grep [options] [options]主要参数: -c:只输出匹配行的计数。 -I:不区分大小写(只适用于单字符)。 -h:查询多文件时不显示文件名。 -l

正则判断手机号码是否正确

喜你入骨 提交于 2020-02-28 18:34:37
- (BOOL)isMobileNumber:(NSString *)mobileNum { /** * 手机号码 * 移动:134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 * 联通:130,131,132,152,155,156,185,186 * 电信:133,1349,153,180,189 */ NSString * MOBILE = @"^1(3[0-9]|5[0-35-9]|8[025-9])\\d{8}$"; /** 10 * 中国移动:China Mobile 11 * 134[0-8],135,136,137,138,139,150,151,157,158,159,182,187,188 12 */ NSString * CM = @"^1(34[0-8]|(3[5-9]|5[017-9]|8[278])\\d)\\d{7}$"; /** 15 * 中国联通:China Unicom 16 * 130,131,132,152,155,156,185,186 17 */ NSString * CU = @"^1(3[0-2]|5[256]|8[56])\\d{8}$"; /** 20 * 中国电信:China Telecom 21 * 133,1349,153,180,189 22 */

正则基础教程一些冷门的知识

☆樱花仙子☆ 提交于 2020-02-28 16:26:42
正则基础教程一些 冷门的 知识 正则引擎 正则分几种引擎也从是本书获得的知识点之一。 DFA 传统型NFA POSIX NFA NFA范围更广,例如 JAVA, PHP, Ruby, .NET... 你是看不起我javascript所以才不列入的吗? 使用DFA的是flex, MySQL, lex, awk大部分版本… 实话说,除了mysql,都没听过。不过不用在意! 两个引擎的区 : NFA 更注重表达式 DFA 文本主导   通过书中里例子说,NFA 用表达式来匹配文本,而 DFA 是文本来匹配文表达式。当写好一个正则之后,NFA 是先检查表达式,同时检查文本是否匹配这个表达式。而 DFA 则是先扫描文本,然后处理表达式中的所有匹配可能,如果匹配失败,就将这条可能的线,淘汰。所以这里衍生一个概念就是回溯,NFA 有回溯,而 DFA 没有。 知识点   作为一个菜鸟,正则表达式一直是书到用时方恨少的角色。平时都是能抄则抄,不能抄的时候干着急,只能用 substr, indexOf, chatAt等等的方法实现功能,既不优雅也不够装逼。上网学习也都是菜鸟教程,W3school。然后下面说一下以上两个基础教程里没说到的知识点。 括号捕获与反向引用   当你在正则表达式里使用了 (),在表达式匹配时,它能记住或者说缓存括号内匹配的结果,从而可以拿到括号内的结果

正则指引-括号

只谈情不闲聊 提交于 2020-02-27 10:27:36
正则指引-括号 之前学习字符组和量词,量词是形容字符组的,但是有时候我们希望用量词来形容多个元素, 我们可以用括号完成,我们可以使用(...)把目标元素括起来,就可以把括号内部看成一个整体, 在括号外部使用量词,量词就会对括号内部的所有元素作用。 用括号改变量词的作用元素: re.research(r"^ab+$","ab"); != none //true re.research(r"^ab+$","abb"); != none //true re.research(r"^(ab)+$","abb"); != none //false re.research(r"^(ab)+$","abab"); != none //true 括号的这种能力就做分组,括号还可以配合"|"来使用,使用形式(...|...), 在括号内用|分隔子表达式形成多选分支,分支数量没有限制,整个多选分支看成单个元素, 只要其中某一个分支表达式匹配成功,整个表达式就匹配成功,都不能则失败。 多选结构,一般是(..|..),但是有时候没有括号,就相当于最外边有一个括号,把整体看成一组。 括号有了分组的功能,还有在使用括号之后,正则表达式会保存每一个分组真正的文本, 还可以通过group(num),方法来获取匹配的文本: re.research(r"(\d{4})-(\d{2})-(\d{2})","2010

正则---让人喜欢让人忧(7)

无人久伴 提交于 2020-02-27 09:06:23
支持正则表达式的String对象方法:   字符串方法有:search match replace split   1. search:返回匹配文本第一个字符索引;找不到返回 -1;        自动忽略全局匹配;忽略lastIndex属性,从字符串开始检索。        stringObject.search(regexp);   2. match: 一个或多个正则表达式的匹配,检索指定的值;       存放匹配结果的数组。数组内容依赖于RegExp是否具有全局标志"g";       stringObject.match(searchvalue);       stringObject.match(regexp); //不是正则对象,传递给RegExp构造函数将其转换为RegExp对象;    var matStr="Hello world!"; var mat=matStr.match("H"); log(mat); //["H", index: 0, input: "Hello world!"] var matt = matStr.match(/l/g); log("全局模式"+matt); //全局模式["l", "l", "l"]   3. replace: 执行的是查找并替换的操作       stringObject.replace(regexp/substr