正则基础

http://www.ipc.me/regular_expression_07681.html
文章错误:
    1 字符集的一些应用 第二个正则少了一个左方括号。
    2 字符集的元字符 /[]x]/中的第一个]左边少了一个转义符,在这种情况下转义符还是不能省略的。

扩展
    1 回车符 换行符 http://www.cnblogs.com/yunf/archive/2011/04/20/2021830.html


表达式引擎
    正则表达式引擎室一种可以处理正则表达式的软件,通常是大程序的一部分,不用的表达式互不兼容(JDK .NET)。
    两种类型:文本导向(text-dereced/DFA) 和 正则导向 (regex-directed/NFA)
    主流是NFA,因为(惰性/lazy quantifiers)以及(反向引用/backreferences)只能在正则NFA中实现。
    分辨两种引擎的方法:
        /reg|reg not/ 如果匹配到reg,那么是正则导向;如果是reg not,是文本导向。
        因为正则导向引擎总是返回最左边的匹配,猴急。
    
特殊字符(11)
    [ ] ()     ^  $   +       \ |     . ?
    2个括号    4  6   12     (\)    shift左边2个
    
    在一些预编译(C++)中,\ 数量加倍

不显示的字符
    \t tab(0x09)
    \r 回车(0x0D)
    \n 换行(0x0A)
    显示的字符,是敲“ABC123”是可以看到的,那换行/回车/Tab 键 是看不到的。

连字符 -
    可以指定范围,如[0-9a-fxA-FX]
    
反字符 [^]
    q[^u]不会匹配iraq,会匹配 Iraq is a country,因为[]必须要匹配一个字符
    如果你只想匹配一个q,条件是q后面有一个不是u的字符,我们可以用后面将讲到的向前查看来解决?
    在[]中, 有 4 个元字符需要转义 ] \ ^ - 其他元字符不需要转义,但是其中 2 个元字符(^-)的转义符不是必须的
    只要将他们放在一个不可能使用到他们的特殊位置,这样子可以增加可读性。
    例如^只要不放到 [ 的后面,就可以不用转义符。[x^] [-x]
    
常用的字符集简写
    \d 0-9    取反\D
    \w A-Za-z0-9 取反\W
    \s 空白字符 空格符 Tab符 回车\r 换行\n  取反 \S
    
    [0-9]+ 仅仅想重复匹配那个数字 向后引用?

注意贪婪
    ?* + 都是贪婪的,会尽可能的重复前导字符。(?会尽可能匹配一次)
    例子:
    var reg = /<.+>/;// /<[^>]+>/ 或者 /<.+?>/
    var str ='This is a <EM>first</EM> test';
    console.log(str.match(reg));
    表达式<.+会贪婪匹配到字符串结束(最后还有个换行符,'.'不匹配换行符,(换行符是怎么出来的?)),然后表达式的剩余        部分 > 去匹配换行符,匹配不成功,然后进行回溯(!!),<.+ 会丢掉匹配的最后一个字符 让>去匹配,直到成功为止。最后    停留在<EM>first</EM。匹配结果是<EM>first</EM>。
    
    '+'的贪婪性使得表达式匹配到最左边的最长的匹配。
    
    不管是惰性匹配还是贪婪匹配,都会进行回溯,会影响效率。

    . == [^\r\n](Window)不匹配换行符的历史原因:为早期使用正则表达式的工具是基于行的。它们都是一行一行的读入一个文件        ,将正则表达式分别应用到每一行上去。在这些工具中,字符串是不包含新行符(\n)的(历史)。现代的工具和语言能够将正则    表达式应用到很大的字符串甚至整个文件上去。    
    单行模式,将整个文件一并读入,此时.匹配新行符,只影响.的匹配范围。
    ***
    多行模式和单行模式没有什么关系,只是名字相似。
    多行模式下,只影响^ 和 $ 的匹配范围
    ^ 可以匹配字符串开头(字符串的开始位置),也可以匹配行的开头(即换行符\n之后的位置)
    $ 可以匹配字符串结尾(字符串的结束位置), 也可以匹配行的结尾(即换行符\n之前的位置)

    Regex.Match(“string”,”regex”,RegexOptions.SingleLine)可以激活单行模式。

    var reg = /(?:0[1-9]|1[0-2])[-/.](?:0[1-9]|[1-2]\d|3[01])/;//(?:)匹配但是不获取,经常和| 配合使用
    var str ='12/01';
    console.log(str.match(reg));

    字符串开始和结束的锚定 (^$)
    ^$ 和一般的表达式符号不用,他不匹配任何字符,他会匹配字符之前或者之后的位置。
    “first line\n\rsecond line”其中的 \n\r 在WINDOWS下是换行回车的标志,正则表达式引擎提供一个选项可以是扩展 '^'
    
绝对锚定
    \A 和 \Z 只匹配整个字符串的开始位置和结束位置,即使你使用了多行模式。

单词边界\b <=> \B
    也是一种锚
    1)在字符串的第一个字符前的位置(如果字符串的第一个字符是一个“单词字符”)
      2)在字符串的最后一个字符后的位置(如果字符串的最后一个字符是一个“单词字符”)
      3)在一个“单词字符”和“非单词字符”之间,其中“非单词字符”紧跟在“单词字符”之后
      4) 在一个“非单词字符”和“单词字符”之间,其中“单词字符”紧跟在“非单词字符”后面
    *单词字符 指 \w == [a-zA-Z0-9]
    
组()与 后向引用
    ()匹配后生成组,\0代表整个背匹配的结果,用\N来引用剩余的,()经常会和|配合使用,用来限制|的范围,(?: pattern)不        获取匹配结果...
    <([A-Z][A-Z0-9]*)[^>]*>.*?</\1> 可以用来匹配标签。
    注意点:
        后向引用不能用于他自身,([abc]\1)
        后向引用不能用于字符集内部 (a)[\1b]
        当对组使用重复操作符时,缓存里后向引用内容会被不断刷新,只保留最后匹配的内容。

模式
    i 大小写不敏感
    s 单行模式
    m 多行模式
    (?i)te(?-i)st 能匹配TEst 原因就是?i开启了不敏感,随后又关闭了敏感,变得敏感了。

    


    
    

   

转载于:https://www.cnblogs.com/cy056/archive/2013/03/11/regExp.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Phone 7独立存储空间IsolatedStorage

Windows Phone 7的solatedStorage可以用来保存应用程序的数据和设置。结构图如下 一、相关类 1.IsolatedStorageFile类 1&#xff09;描述&#xff1a;表示在独立存储空间中的文件和目录。 2&#xff09;重要属性 long AvailableFreeSpace&#xff1a;IsolatedStorage有效的剩余…

图像分割-阈值处理详解(迭代法、Otsu法、平滑改善法、边缘改进法、分块处理法、局部特性法、移动平均法)

博主联系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里会有往届的smarters和电赛选手&#xff0c;群里也会不时分享一些有用的资料&#xff0c;有问题可以在群里多问问。 阈值处理详解基础&#xff1a;基于全局的阈值处理1迭代算法&#xff08;最小概率误…

java 用户控件_C#自定义控件VS用户控件

C#中自定义控件VS用户控件大比拼1 自定义控件与用户控件区别WinForm中&#xff0c;用户控件(User Control)&#xff1a;继承自 UserControl&#xff0c;主要用于开发 Container 控件&#xff0c;Container控件可以添加其他Controls控件自定义控件(Custom Control)&#xff1a;继…

Java FileDescriptor sync()方法与示例

FileDescriptor类sync()方法 (FileDescriptor Class sync() method) sync() method is available in java.io package. sync()方法在java.io包中可用。 sync() method is used to synchronize all the system buffer with the underlying device. sync()方法用于将所有系统缓冲…

windows 7资源管理器崩溃解决方法

最近被频繁的资源管理器explorer崩溃搞得几乎生活不能处理&#xff0c;一打开带有视频的文件夹&#xff0c;就explorer崩溃&#xff0c;要疯了。 日志中含有mpc_mtcontrol.dll 查来查去&#xff0c;没有一个确定的答案&#xff0c;baidu&#xff0c;google都没用&#xff0c;最…

03-对图像进行数值计算和加权融合

数值计算 import cv2img_1 cv2.imread(E:\Jupyter_workspace\study\data/beyond.png) img_2 cv2.imread(E:\Jupyter_workspace\study\data/water2.png)img_1_1 img_1 10 img_1[:2,:,0]#输出前两行就行 img_1_1[:2,:,0]#[h,w,c] img_2[:2,:,0]#[h,w,c](img_1 img_2)[:2,:,…

SQL Server存储过程(procedure)应用

用户反映&#xff0c;系统操作日志会使用数据库快速增大&#xff0c;情况可参考下图&#xff0c; 问题分析&#xff0c;整个系统每个页面&#xff0c;都有写记录用户操作代码&#xff0c;修改或禁用这个代码&#xff0c;看来是不可能的。 在原有系统参数表添加一个选项&#xf…

Opencv一维直方图的绘制

下面是我参考《opencv3编程入门》写的绘制一维直方图的代码 using namespace cv; using namespace std; #define byte uchar #define TYEPE_GRAY 0 #define TYEPE_RGB 1 /*--------------------------绘制RGB三色一维直方图-------------------------------------*/ Mat My_R…

Java类class forName()方法及示例

类类forName()方法 (Class class forName() method) forName() method is available in java.lang package. forName()方法在java.lang包中可用。 forName() method is used to return the class object for the Class with the given class_name. forName()方法用于返回具有给…

04-图像的阈值操作

对图像的阈值操作 import cv2 import matplotlib.pyplot as pltimg cv2.imread(E:/Jupyter_workspace/study/data/cat.png,1) ret, thresh1 cv2.threshold(img,127,255,cv2.THRESH_BINARY) ret, thresh2 cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV) ret, thresh3 c…

java虚拟机内存监控_深入理解JVM虚拟机9:JVM监控工具与诊断实践

本文转自&#xff1a;https://juejin.im/post/59e6c1f26fb9a0451c397a8c本系列文章将整理到我在GitHub上的《Java面试指南》仓库&#xff0c;更多精彩内容请到我的仓库里查看https://github.com/h3pl/Java-Tutorial喜欢的话麻烦点下Star哈文章将同步到我的个人博客&#xff1a;…

详解:数据库名、实例名、ORACLE_SID、数据库域名、全局数据库名、服务名

数据库名、实例名、数据库域名、全局数据库名、服务名&#xff0c;这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在就来把它们弄个明白。 一、数据库名什么是数据库名&#xff1f;数据库名就是一个数据库的标识&#…

颜色缩减 -利用指针、迭代器、动态地址实现访问像素

为什么要使用颜色缩减 在对单通道图像进行处理时&#xff0c;像素的可能值为256个&#xff0c;但处理多通道时&#xff0c;像素的处理就会相当麻烦&#xff0c;其实用这些颜色中具有代表性的一小部分就可以达到同样的效果&#xff0c;所以颜色空间缩减就可以派上用场了。一个信…

setlenient_Java日历setLenient()方法与示例

setlenient日历类setLenient()方法 (Calendar Class setLenient() method) setLenient() method is available in java.util package. setLenient()方法在java.util包中可用。 setLenient() method is used to set or unset lenient status of date or time interpretations. s…

PowerShell_9_零基础自学课程_9_高级主题:静态类和类的操作

哈哈&#xff0c;昨天弄了个ubuntu 11.10在虚拟机上运行&#xff0c;发现11.10界面非常绚丽&#xff0c;但是其需要的系统资源非常多&#xff0c;我虚拟机设定内存为512M&#xff0c;1个CPU4个核心&#xff0c; 进入以后发现根本动不了&#xff0c;因此今天我就下载了一个Fedor…

05-图像的平滑处理(不同的滤波操作)

对图像进行平滑处理实则就是对图像进行滤波操作罢了 每张图片都有若干个像素点所构成&#xff0c;滤波操作上就是将照片上的某些部分像素点进行修改从而达到平滑的效果 先展示一下原图 import cv2 img cv2.imread(E:\Jupyter_workspace\study\data/test1.png)cv2.imshow(te…

js删除mysql记录_(DELETEUPDATE)修改、删除数据记录_MySQL

有时&#xff0c;希望除去某些记录或更改它们的内容。DELETE 和 UPDATE 语句令我们能做到这一点。用update修改记录UPDATE tbl_name SET 要更改的列WHERE 要更新的记录这里的 WHERE 子句是可选的&#xff0c;因此如果不指定的话&#xff0c;表中的每个记录都被更新。例如&#…

C++设计模式之Abstract Factory模式

一、功能   提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 二、结构图类厂最基本的结构示意图如下&#xff1a; 在实际应用中&#xff0c;类厂模式可以扩充到很复杂的情况&#xff0c;如下图所示&#xff1a; 三、优缺点 优点&#xff1…

数字图像处理小练习存档1

小练习的题目&#xff1a; 1、读取一张图&#xff0c;分解RGB三个通道 /************练习1**********************/ int main() {Mat img1 imread("D:\\opencv_picture_test\\miku2.jpg",2|4); //灰度图if (img1.empty()){printf("Could not find the imag…

UIImage 压缩

1.改变图片大小 -(UIImage*)imageWithImage:(UIImage*)image scaledToSize:(CGSize)newSize {// Create a graphics image contextUIGraphicsBeginImageContext(newSize);// Tell the old image to draw in this new context, with the desired// new size[image drawInRect:CG…