php正则表达式基本

一.正则表达式的组成

1.分隔符,可以是除了字母,数字,反斜线及空白以外的任何字符,比如/,!,#,%,|,~等;通常有/,!,~

2.表达式:由一些特殊字符和非特殊字符组成.

3.修饰符:用于开启或关闭某种功能/模式

二.元字符

常用的元字符有以下几种

.    匹配除换行符外任何字符
\w    匹配字母或数字或下划线或汉字
\s    匹配任意空白字符
\d    匹配数字
\b    匹配单词开始或结束
^    匹配字符串开始
$    匹配字符串结束
-    表示范围
[]    匹配括号中任意一个字符
* + ?    量词

三.字符组

如果匹配没有预定义的元字符,可以使用字符组;只需要在[]内列出他们;
如
[aoeiou]匹配任何一个英文元音字母;
[.?!] 匹配标点符号 . ? !

ps:尽管[]号内有好多字符,但他只匹配单个字符

四.转义

如果要匹配元字符本身,比如?,直接匹配,会被当成元字符处理,这时候要使用转义;
\?

如:
\? 就可匹配字符串中含有?的字符串

ps:字符组中的元字符不需要转义

五.反义

\W    匹配除字母或数字或下划线或汉字以外
\S    匹配除任意空白字符以外
\D    匹配除数字以外
\B    匹配不是单词开始或结束的位置

字符组的反义是加^
[^abc] 匹配除了abc这几个字母以外的任意字符

ps:反义的特征是和一些已知元字符相反,并且为大写形式.字符组例外

六.分支

| 表示分支

分支就是存在多种可能的匹配情况;如要匹配cat,hat,fat,toat,就可以用分支形式
(c|h|f|to)at

ps:匹配分支条件时,从左到右测试每个条件,如果满足某个分支,就不再考虑其他条件.

七.分组

重复单个字符需要限定符即可做到,重复多个字符就需要分组;分组用小括号指定表达式,然后规定这个表达式重复的次数.

1.捕获
(exp)        匹配exp,并捕获文本到自动命名组里
(?<name>exp)    匹配exp,并捕获文本到name组里
(?:exp)        匹配exp,不捕获,也不分配组号 

示例1:
<?php
$str = ‘cat‘;
preg_match_all(‘/(c).*/‘, $str, $arr);
var_dump($arr);

输出(自动命名组):
array(2) {
  [0]=>
  array(1) {
    [0]=>
    string(3) "cat"
  }
  [1]=>
  array(1) {
    [0]=>
    string(1) "c"
  }
}

示例2:
<?php
$str = ‘cat‘;
preg_match_all(‘/(?<name>c).*/‘, $str, $arr);
var_dump($arr);

输出(多出一个test组):
array(3) {
  [0]=>
  array(1) {
    [0]=>
    string(3) "cat"
  }
  ["test"]=>
  array(1) {
    [0]=>
    string(1) "c"
  }
  [1]=>
  array(1) {
    [0]=>
    string(1) "c"
  }
}

示例3:
<?php
$str = ‘cat‘;
preg_match_all(‘/(?:c).*/‘, $str, $arr);
var_dump($arr);

输出:

array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(3) "cat"
  }
}

2.零宽断言(匹配的是事实,不是内容)
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面跟的不是exp的位置

如:
<?php
$str = ‘testecattest‘;
preg_match_all(‘/(?=te)/‘, $str, $arr);

则输出:
array(1) {
  [0]=>
  array(3) {
    [0]=>
    string(0) ""
    [1]=>
    string(0) ""
    [2]=>
    string(0) ""
  }
}
匹配到三处

ps:默认情况下,每个分组拥有一个组号,规则是从左到右,以分组的左括号为标志,第一个出现在分组里的为1,第二个为2,以此类推;分组0为整个表达式.

八.反向引用

反向引用在于重复搜索前面某个分组匹配的文本.

示例:
$str = ‘[url]1.gif[/url]‘;
$img = preg_replace(‘/\[url\](\d+\.gif)\[\/url\]/‘, ‘<img src="$1" />‘, $str);
echo $img;

输出
<img src="1.gif" />

$1匹配了分组(\d+\.gif)

九.环视(零宽断言)

1.顺序肯定环视(?=exp)
断言自身出现位置的后面能匹配表达式exp
示例:
<?php
$str = ‘what are you doing testing?‘;
preg_match_all(‘/\b\w+(?=ing\b)/‘, $str, $arr);
var_dump($arr);

匹配do和test

2.逆序肯定环视(?<=exp)
断言自身出现位置的前面能匹配表达式exp
示例:
<?php
$str = ‘what are you doing testing?‘;
preg_match_all(‘/\b(?=ing)/‘, $str, $arr);
var_dump($arr);

匹配doing和testing

3.顺序否定环视(?!exp)

4.逆序否定环视(<!exp)

十.常用修饰符/模式
1. i    忽略大小写
示例:
<?php
$str = ‘cat test CAT‘;
preg_match_all(‘/cat/i‘, $str, $arr);
var_dump($arr);

不加i修饰符,只匹配cat

2. m    多行模式
仅当表达式中出现^,$至少一个元字符且有换行符\n时,m修饰符才起作用;

如:
$str = ‘cat 

test
cat‘;

要提取cat

a.不用多行模式
preg_match_all(‘/cat.*/‘, $str, $arr);

b.用多行模式
preg_match_all(‘/cat.*$/m‘, $str, $arr);

3.s    点号统配模式(.号可以匹配换行符)
如:
<?php
$str = ‘cat
t
test
cat
f‘;
preg_match_all(‘/t.*f/s‘, $str, $arr);
var_dump($arr);

输出:
array(1) {
  [0]=>
  array(1) {
    [0]=>
    string(19) "t
t
test
cat
f"
  }
}

4.U    懒惰模式
等效于懒惰匹配

5.D    结尾限制
等效于结尾限定符

6.u    启用pcre中与perl不兼容的功能,模式字符串被当成utf-8
时间: 2024-11-05 14:48:29

php正则表达式基本的相关文章

【Linux系列】【基础版】第四章 Shell基础之正则表达式

4. Shell基础之正则表达式     4.1 正则就是一串有规律的字符串         4.1 grep              4.1.1 格式: grep [-cinrvABC] 'word' filename             4.1.2 -c //count,表示行数             4.1.3 -i //不区分大小写             4.1.4 -n  //显示行号             4.1.5 -r  //遍历所有子目录             4

正则表达式中的逆向思维

人们的正常思维都是顺向的,那么逆向思维呢,特别是初学正则表达式的同学们,好不容易掌握了正则表达式的用法,再突然要你用逆向思维做题,会有很多不适应: 这里拿三道题,来做简单介绍: 1.经典例题取IP: [[email protected] ~]# ifconfig eth0|sed -nr '2s#^[^0-9]+(.*)[a-Z]{5,}.*#\1#gp' 10.0.0.200 2.调换/etc/passwd中最后一列和第一列的位置: [[email protected] ~]# head /p

JAVA正则表达式:Pattern类与Matcher类详解(转)

java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表现模式. Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查. 首先一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作

前端学PHP之正则表达式函数

前面的话 正则表达式不能独立使用,它只是一种用来定义字符串的规则模式,必须在相应的正则表达式函数中应用,才能实现对字符串的匹配.查找.替换及分割等操作.前面介绍了正则表达式的基础语法,本文将详细介绍正则表达式函数 匹配与查找 [preg_match()] preg_match()函数用来执行一个正则表达式匹配,搜索subject与pattern给定的正则表达式的一个匹配.返回pattern的匹配次数.它的值将是0次(不匹配)或1次,因为preg_match()在第一次匹配后将会停止搜索.preg

正则表达式

grep命令和正则表达式 一. 正则 : 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.给定一个正则表达式和另一个字符串,我们可以达到如下的目的:1. 给定的字符串是否符合正则表达式的过滤逻辑(称作"匹配"):2. 可以通过正则表达式,从字符串中获取我们想要的特定部分. 正则表达式和通配符一样,也是一组特殊符号,通配符是由sh

java中的正则表达式

正则表达式 : 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. 一些字符所代表的意思: \        将下一字符标记为特殊字符.文本.反向引用或八进制转义符^       匹配输入字符串开始的位置$       匹配输入字符串结尾的位置.        匹配任何单个字符\s      空白(空格符.换行符.回车符.制表符)\S     非空白[]  

Python 正则表达式相关问题

这几天学习python,写正则表达式相关代码如下: import re print(re.search(r'(?<=<(\w+)>).*(?=<\/\1>)',"<b>ewuiiriur</b>sdksfkj").span()) 报错如下: raise error("look-behind requires fixed-width pattern")sre_constants.error: look-behind

7.python之正则表达式re模块

一.re模块的常用方法: re.findall() 用于返回一个字符串中,所有能被正则表达式所匹配到的字符串,以列表的方式返回. 用法re.findall(正则表达式,字符串). s1 = "sadjhjafdsajkhjsdaysadsadduayu" 比如说,想要从上面这一长串字符串中,匹配出a后面有一个任一字符在紧接着一个字母u的字符串. print re.findall('a.u',s1) >>>['ayu'] re.finditer()作用和findall一

JS中有关正则表达式的一些常见应用

总所周知,正则表达式主要用于字符串处理.表单验证等,简单的代码量实现复杂的功能 1.身份证号码的一个校验 先做一个简单的位数校验来判断身份证的合法性:(15位数字或18位数字或17位数字加X|x) var reg=/(^\d{15}$)|(^\d{18}$)|(^\d{17}(^\d|X|x)$)/ if(reg.test(num) === false){ alert("你输入的身份证不合法"); return false; } 18位=前六位地区+中八位出生日期+后4位顺序号(最后一

4-4 grep及正则表达式

1. grep:Globally search a Regular Expression and Print:根据模式搜索文本,并将符合模式的文本行显示出来 pattern:文本字符和正则表达式的元字符 一般查询 其中 -i:忽略大小写 --color: 另外,删掉alias,是以如下格式 -v:显示没有被模式匹配的行 -o:只显示被模式匹配到的字符串 2. 正则表达式:regular expression,简称REGXP 3. 位置锚空 ^: 锚空行道,此字符后的任意内容必须出现在行首 $: