模式匹配

js正则表达式

為{幸葍}努か 提交于 2019-12-30 08:56:34
正则表达式的写法: var reg = new RegExp("str"," gim ");  new正则对象 var reg1 = /str/ gim ;      正则字面量(常用)   g  全局匹配   i   不区分大小写   m  执行多行匹配 根据需求选择: i   im   img   ig  gm   g   m 比较new RegExp()与RegExp() : 当我们在new正则对象,里面传递的参数是正则对象时,如:var reg2 = new RegExp(reg1,'g'),此时生成的是一个新的正则对象,也就是reg2 === reg1  返回false; 我们不用new时,直接写RegExp(),如:var reg3 = RegExp(reg1,'g'),此时没有生成新的对象,reg3的值还是原来的正则对象,reg3 === reg1  返回true; 正则字面量 : var reg = /[abcde]/;   一个[]表示一个字符 ,匹配abcde中的任意一个字符 var reg = /[a-z]/;    "-"写在范围中间,就认为成一个区间,如需匹配“-”,不要将它写在中间就行;匹配所有的小写字母中的一个 var reg = /[^abc]/;   "^"写在[]里表示取反,匹配除了abc字符外的所有字符中的一个 var reg = /^[abc

Python 正则表式

大兔子大兔子 提交于 2019-12-29 21:33:20
1.1 查找文本中的模式 1 import re 2 pattern = 'this' 3 text = 'Does this text match the pattern?' 4 match = re.search(pattern,text) 5 6 s = match.start() 7 e = match.end() 8 9 print(match.re.pattern,match.string,s,e,text[s:e]) 1.2 编译表达式 1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import re 4 5 regexes = [re.compile(p) for p in ['this','that']] 6 text = 'Does this text match the pattern?' 7 print("Text: %r\n",text) 8 9 for regex in regexes: 10 print('Seeking "%s" ->' % regex.pattern) 11 if regex.search(text): 12 print('Match') 13 else: 14 print("No match!") 1.3 多重匹配 1 import re 2 text =

pcre和正则表达式的误点

蹲街弑〆低调 提交于 2019-12-29 07:30:11
本文只是关于正则一些容易出错的地方,关于正则的学习,可参考如下两篇文章: 基础正则: https://www.cnblogs.com/f-ck-need-u/p/9621130.html Perl正则: https://www.cnblogs.com/f-ck-need-u/p/9648439.html 1.正则中所有的匹配模式,都应该理解为"匹配了某字符或字符串后,紧跟着再匹配"。这个概念很重要。 2.中括号首部使用脱字符时,表示的是紧跟着匹配不含给定字符的字符,而不是允许不匹配给定的字符。 它们大多数时候是等价的,但在匹配行尾时,意义不同,例如:Aa[^bcd]$ 所匹配的行允许是Aaa$或Aax$,但不允许仅是Aa$。 这就是正则中"紧跟着匹配"的意思。 3.(\.[0-9]+)? 可匹配小数点部分,不能写成 (\.?[0-9]*) ,后者即使不能匹配小数点,也能匹配原本处于小数点后的数值 4.星号*匹配问题0或多个字符,如果写成"a*",将可以匹配任何单个字符,只不过对于非a字符,匹配到的结果为空。 例如字符串"111aaaAAA",正则"1a*"其实从读取第2个字符进行匹配的时候就已经匹配完成了,匹配的结果不是"1aaa",而是"1"加上1前面的一个空,因为是从行首这个锚定位开始匹配的。使用sed或perl进行替换操作就很容易理解。 $ echo '111aaaAAA'

Php中正则小结(一)

时光毁灭记忆、已成空白 提交于 2019-12-29 07:29:50
一.概念 语法模式类似 perl . 表达式必须用分隔符闭合,比如一个正斜杠 (/). 分隔符可以是 任意非字母非数字,除反斜杠 (\) 和空字节之外的非空白 ascii 字符 如果分隔符 在表达式中使用,需要使用反斜线进行转义 。 二.组成 元字符 一个正则表达式基本组成 /原子和元字符/模式修正符 /代表定界符的一个 正则表达式的威力在于其能够在模式中包含选择和循环。它们通过使用元字符来编码在模式中,元字符不代表其自身,它们用一些特殊的方式来解析。 根据在方括号的内部还是外部分为两种。 1.方括号之外的元字符 元字符(符号) 说明 \ 一般用于转义字符 ^ 断言目标的开始位置(或在多行模式下是行首) $ 目标的结束位置(活在多行模式下行尾) . 匹配除换行符外任何字符(默认时) [,] 开始,结束字符类定义 | 开始一个可选分支 ( ,) 子组的开始,结尾标记 ? 作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性 * 量词,0 次或多次匹配 + 量词,1 次或多次匹配 { ,} 自定义量词开始标记,结束标记 2.模式中方括号内的部分称为“字符类” 元字符 说明 \ 转义字符 ^ 仅在作为第一个字符时,表明字符类取反 - 标记字符范围 元字符用法说明举例 1.转义(反斜线) \后紧跟着一个非字母数字字符,则取消该字符可能具有的任何特殊含义

前端学PHP之正则表达式基础语法

末鹿安然 提交于 2019-12-29 07:29:19
前面的话   正则表达式是用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式分割、匹配、查找及替换操作。在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述。正则表达式有三个作用:1、匹配,也常常用于从字符串中析取信息;2、用新文本代替匹配文本;3、将一个字符串拆分为一组更小的信息块。本文将详细介绍PHP中的正则表达式基础语法   [注意]关于javascript的正则表达式的详细信息 移步至此 历史   在PHP中有两套正则表达式函数库,两者功能相似,只是执行效率略有差异:一套是由PCRE(Perl Compatible Regular Expression)库提供的,使用“preg_”为前缀命名的函数;另一套由POSIX(Portable Operating System Interface of Unix)扩展提供的,使用以“ereg_”为前缀命名的函数   PCRE来源于Perl语言,而Perl是对字符串操作功能最强大的语言之一,PHP的最初版本就是由Perl开发的产品。PCRE语法支持更多特性,比POSIX语法更强大   在PHP4之前,主要使用POSIX;而现在,则使用主流的PCRE   正则表达式作为一个匹配的模式,是由原子(普通字符,例如字符a到z)、特殊字符(元字符,例如*、+和?等)

字符串模式匹配之KMP算法的next数组详解与C++实现

↘锁芯ラ 提交于 2019-12-27 17:34:54
相信来看next数组如何求解的童鞋已经对KMP算法是怎么回事有了一定的了解,这里就不再赘述,附上一个链接吧:https://www.cnblogs.com/c-cloud/p/3224788.html,里面对KMP算法有详细的讲解,如果你还不了解KMP算法,可以看看~~。 下面就来讲解不容易理解但又很重要的next数组,相信这是你看过的最容易理解的next数组的讲解了(*^_^*)。 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一、首先,next数组是什么? 简单来说,假设我们有一个主串S和一个模式串T,并且想知道S是否包含T,如果包含,那么T第一次出现在S中的首字符在什么位置?有一种暴力求法:当S[i]!=T[j]的时候,j回溯到j=0,而i回溯到i=i-j+1,这种方法简答粗暴,但效率低下,时间复杂度的范围是(最好与最坏情况):O(n+m)~O(n*m),其中,n为主串S的长度,m为模式串T的长度; KMP算法

RegExp对象

孤人 提交于 2019-12-26 20:46:50
JavaScript提供了一个RegExp对象来完成有关正则表达式的操作和功能,每一条正则表达式模式对应一个RegExp实例。有两种方式可以创建RegExp对象的实例。 使用RegExp的显式构造函数,语法为:new RegExp("pattern"[,"flags"])。 使用RegExp的隐式构造函数,采用纯文本格式:/pattern/[flags]。 pattern部分为要使用的正则表达式模式文本,是必须的。在第一种方式中,pattern部分以JavaScript字符串的形式存在,需要使用双引号或单引号括起来;在第二种方式中,pattern部分嵌套在两个“/”之间,不能使用引号。 flags部分设置正则表达式的标志信息,是可选项。如果设置flags部分,在第一种方式中,以字符串的形式存在;在第二种方式中,以文本的形式紧接在最后一个“/”字符之后。flags可以是以下标志字符的组合。 g是全局标志。如果设置了这个标志,对某个文本执行搜索和替换操作时,将对文本中所有匹配的部分起作用。如果不设置这个标志,则仅搜索和替换最早匹配的内容。 i是忽略大小写标志。如果设置了这个标志,进行匹配比较时,将忽略大小写。 m是多行标志。如果不设置这个标志,那么元字符“^”只与整个被搜索字符串的开始位置相匹配,而元字符“$”只与被搜索字符串的结束位置相匹配。如果设置了这个标志,“^

用Java匹配模式

情到浓时终转凉″ 提交于 2019-12-25 18:40:33
在优锐课的java学习分享中,我们探讨了关于了解有关Java中匹配模式的更多信息。我们可以看到,码了很多专业的相关知识, 分享给大家参考学习。 如果你使用的是Java,那么你之前很有可能会看到其模式匹配。 String#matches(String)方法在内部使用Pattern类型,它包含更复杂的功能: 通过编译正则表达式来创建模式。 该模式与任何输入字符串匹配,并且可以选择查找捕获组,这些捕获组隔离了字符串数据的某些部分。 该API的用法如下: Pattern pattern = Pattern.compile("([\\^\\S]+) is powerful"); Matcher matcher = pattern.matcher("Java is powerful"); System.out.println(matcher.find()); // true System.out.println(matcher.group()); // Java is powerful System.out.println(matcher.group(1)); // Java find()方法查找模式的下一个匹配项,在此示例中与整个输入字符串匹配。 group()方法将返回整个捕获组,即匹配整个模式,或者在使用索引限定时返回单个捕获组。 捕获组索引从1开始,而不是从0开始。 还有matches

Yacc 与 Lex 快速入门

情到浓时终转凉″ 提交于 2019-12-23 21:21:45
developerWorks 中国 > Linux > Yacc 与 Lex 快速入门 Lex 与 Yacc 介绍 文档选项 打印本页 将此页作为电子邮件发送 级别: 初级 Ashish Bansal ( mailto:abansal@ieee.org?subject=Yacc 与 Lex 快速入门&cc=abansal@ieee.org ), 软件工程师, Sapient 公司 2000 年 11 月 01 日 Lex 和 Yacc 是 UNIX 两个非常重要的、功能强大的工具。事实上,如果你熟练掌握 Lex 和 Yacc 的话,它们的强大功能使创建 FORTRAN 和 C 的编译器如同儿戏。Ashish Bansal 为您详细的讨论了编写自己的语言和编译器所用到的这两种工具,包括常规表达式、声明、匹配模式、变量、Yacc 语法和解析器代码。最后,他解释了怎样把 Lex 和 Yacc 结合起来。 Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler。 让我们从 Lex 开始吧。 Lex Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。 一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记

VIM命令大全(图+文)

白昼怎懂夜的黑 提交于 2019-12-23 04:40:09
在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。 vim 选择文本,删除,复制,粘贴 文本的选择,对于编辑器来说,是很基本的东西,也经常被用到,总结如下: v 从光标当前位置开始,光标所经过的地方会被选中,再按一下v结束。 V 从光标当前行开始,光标经过的行都会被选中,再按一下V结束。 Ctrl + v 从光标当前位置开始,选中光标起点和终点所构成的矩形区域,再按一下Ctrl + v结束。 ggVG 选中全部的文本, 其中gg为跳到行首,V选中整行,G末尾 选中后就可以用编辑命令对其进行编辑,如 d 删除 y 复制 (默认是复制到"寄存器) p 粘贴 (默认从"寄存器取出内容粘贴) "+y 复制到系统剪贴板(也就是vim的+寄存器) "+p 从系统剪贴板粘贴 ============================================================= vim命令总结 1.删除字符 要删除一个字符,只需要将光标移到该字符上按下 "x"。 2.删除一行 删除一整行内容使用 "dd"命令。删除后下面的行会移上来填补空缺。 3.删除换行符 在 Vim中你可以把两行合并为一行