正则表达式是一个从左到右匹配目标字符串的模式。大多数字符自身就代表一个匹配 它们自身的模式。

1.分隔符:当使用 PCRE 函数的时候,模式需要由分隔符闭合包裹。分隔符可以使任意非字母数字、非反斜线、非空白字符。

经常使用的分隔符是正斜线(/)、hash符号(#) 以及取反符号(~)。下面的例子都是使用合法分隔符的模式。

/foo bar/
#^[^0-9]$#
+php+
%[a-zA-Z0-9_-]% 如果分隔符需要在模式内进行匹配,它必须使用反斜线(\)进行转义。如果分隔符经常在 模式内出现, 一个更好的选择就是是用其他分隔符来提高可读性。
/http:\/\//
#http://# 需要将一个字符串放入模式中使用时,可以用 preg_quote() 函数对其进行 转义,它的第二个参数(可选)可以用于指定需要被转义的分隔符。

除了上面提到的分隔符,也可以使用括号样式的分隔符,左括号和右括号分别作为开始和结束 分隔符。

{this is a pattern}

可以在结束分隔符后面增加模式修饰符。 下面的例子是一个大小写不敏感的匹配:

#[a-z]#i

2.元字符
正则表达式的威力源于它可以在模式中拥有选择和重复的能力。 一些字符被赋予 特殊的涵义,使其不再单纯的代表自己,模式中的这种有特殊涵义的编码字符 称为 元字符.

共有两种不同的元字符:一种是可以在模式中方括号外任何地方使用的,另外一种 是需要在方括号内使用的。 在方括号外使用的元字符如下:

\
一般用于转义字符
^
断言目标的开始位置(或在多行模式下是行首)
$
断言目标的结束位置(或在多行模式下是行尾)
.
匹配除换行符外的任何字符(默认)
[
开始字符类定义
]
结束字符类定义
|
开始一个可选分支
(
子组的开始标记
)
子组的结束标记
?
作为量词,表示 0 次或 1 次匹配。位于量词后面用于改变量词的贪婪特性。 (查阅量词)
*
量词,0 次或多次匹配
+
量词,1 次或多次匹配
{
自定义量词开始标记
}
自定义量词结束标记
模式中方括号内的部分称为“字符类”。 在一个字符类中仅有以下可用元字符:
\
转义字符
^
仅在作为第一个字符(方括号内)时,表明字符类取反
-
标记字符范围
3.转义序列(反斜线)

反斜线有多种用法。首先,如果紧接着是一个非字母数字字符,表明取消 该字符所代表的特殊涵义。这种将反斜线作为转义字符的用法在字符类 内部和外部都可用。

比如,如果你希望匹配一个 "*" 字符,就需要在模式中写为 "\*"。 这适用于一个字符在不进行转义会有特殊含义的情况下。 但是, 对于非数字字母的字符,总是在需要其进行原文匹配的时候在它前面增加一个反斜线, 来声明它代表自己,这是安全的。如果要匹配一个反斜线,那么在模式中使用 ”\\”。

Note:

反斜线在单引号字符串和双引号字符串 中都有特殊含义,因此要匹配一个反斜线, 模式中必须写为 ”\\\\”。 译注: “/\\/”, 首先它作为字符串,反斜线会进行转义, 那么转义后的结果是/\/,这个才是正则表达式引擎拿到的模式, 而正则表达式引擎也认为 \ 是转义标记,它会将分隔符 / 进行转义, 从而得到的是一个错误,因此,需要 4 个反斜线才可以匹配一个反斜线。

4.锚

正则表达式学习(PCRE)的更多相关文章

  1. 深入浅出的javascript的正则表达式学习教程

    深入浅出的javascript的正则表达式学习教程 阅读目录 了解正则表达式的方法 了解正则中的普通字符 了解正则中的方括号[]的含义 理解javascript中的元字符 RegExp特殊字符中的需要 ...

  2. Python正则表达式学习摘要及资料

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2 ...

  3. JavaScript正则表达式学习笔记(二) - 打怪升级

    本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...

  4. Python 正则表达式学习

    摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会匹配 4 个 a,但 a{2, ...

  5. Python 正则表达式学习摘要及资料

    来源:Michael_翔_ 摘要 在正则表达式中,如果直接给出字符,就是精确匹配. {m,n}? 对于前一个字符重复 m 到 n 次,并且取尽可能少的情况 在字符串'aaaaaa'中,a{2,4} 会 ...

  6. javascript正则表达式 - 学习笔记

    JavaScript 正则表达式 学习笔记 标签(空格分隔): 基础 JavaScript 正则表达式是用于匹配字符串中字符组合的模式.在javascript中,正则表达式也是对象.这些模式被用于Re ...

  7. PHP中正则表达式学习及应用(四)

    正则表达式在PHP中的应用 1.匹配功能 2.替换功能 3.分割功能 例如: <?php $str="addsds{title}hfksjd{author}hfjdkjd{conn}j ...

  8. PHP中正则表达式学习及应用(三)

    正则表达式中的“模式修正符” 1.运算顺序    2.模式修正符 i 正则内容在匹配时候不区分大小写(默认是区分的) 例如: <?php $mode="/[a-z]/i"; ...

  9. PHP中正则表达式学习及应用(二)

    正则表达式中的“元字符” * 匹配前一个内容的0次1次或多次 例如: <?php $mode="/go*gle/"; //前一个内容指的是 * 的前一个字符 o ,在$str ...

  10. PHP中正则表达式学习及应用(一)

    1.正则表达式的介绍和作用 什么是正则表达式 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串 的需要.正则表达式就是用于描述这些规则的语法. 例:在判断用户邮件地址格式.手机号码 ...

随机推荐

  1. VMware8安装配置Win7、CentOS-7向导

    1.宿主电脑配置情况 Windows 8.1 中文版 Intel(R) Core(TM) i5-4210U CPU @ 1.70GHz 2.4GHz RAM: 8G Type: 64 bit 2.软件 ...

  2. CF1020B Badge 【模拟链表】

    n个点(n<=1000) 接下来n个整数表示ai 第i个数ai表示i到ai有一条边 输出: n个数 表示从第i个点出发,最先被访问两次的点 样例1: 从1 出发,先到达2,2会到达3,3又到达2 ...

  3. AndroidManifest.xml文件详解(permission-group)

    http://blog.csdn.net/think_soft/article/details/7578760 语法(SYNTAX): <permission-groupandroid:desc ...

  4. LBP,LBP-TOP的MATLAB公开代码

    http://www.cse.oulu.fi/CMV/Downloads http://www.cse.oulu.fi/wsgi/CMV/Downloads/LBPMatlab

  5. Java 获取JVM内存和物理内存信息

    package com.sysinfo; public class MonitorInfo { /** jvm可使用内存. */ private long totalMemory; /** jvm剩余 ...

  6. 洛谷P4587 [FJOI2016]神秘数(主席树)

    题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\ ...

  7. 使用screen后台实时执行命令

    在做一个大体积的数据备份时,在远程终端上直接运行备份脚本back.sh,或运行back.sh&放到后台运行,此时关闭远程终端,或网络断开都会让命令停止运行.此时就要使用到screen命令. s ...

  8. (疯狂java)第三课

    最近很忙,都没有看书,罪过... 第五章(面向对象上) 1.类是一种对数据结构的封装,也就是说,一个类在在理解上事存在实际的含义的,比如一个人类,人类也是个类,表明这个类不是家禽类,是有人的特点的生物 ...

  9. kong结合consul

    早期版本 ./etcdctl ls / --recursive /name /name1 /name1/wyc /name1/wu /name1/chao /name1/chao/age ------ ...

  10. Activity(活动)的启动模式

    在实际项目中我们应该根据特定的需求为每个活动指定相应的启动模式.启动模式一共分为4种:standar.singleTop.singleTask和singleInstance.可以在AndroidMan ...