一、原子

1.普通字符

    $pattem = '/a/';
    $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk';
    $a = preg_match_all($pattem,$subject,$matches);
    var_dump($a);   // 输出匹配次数
    var_dump($matches); // 输出匹配结果

2.非打印字符

    $pattem = '/\n/';
    $subject = '11112222333344445555666677778888999900000
    aaabbbcccdddeeefffggghhhiiijjjjkkkk';
    $a = preg_match_all($pattem,$subject,$matches);
    var_dump($a);   // 输出匹配次数
    var_dump($matches); // 输出匹配结果

3.自定义字符

$pattem = '/[a-z]/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

二、元字符

  • 元字符是修饰原子字符的,可以理解为原子的定语或限定条件
  • 元字符不允许单独使用,必须配合原子,共同工作

( . ) 括号里的匹配符,匹配除换行符之外的任意一个字符

$pattem = '/12./';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk OUYANGKE OUYANGKE zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

( | ) 括号里的匹配符,匹配 2 个或多个分支

$pattem = '/12|67/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

( [ ] ) 括号里的匹配符,匹配方括号内指定的任意一个原子

 $pattem = '/[1234]/';
 $subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
 $a = preg_match_all($pattem,$subject,$matches);
 var_dump($a);   // 输出匹配次数
 var_dump($matches); // 输出匹配结果

( [^ ] ) 括号里的匹配符, 匹配除方括号内指定原子以外的任意一个原子

$pattem = '/[^1234]/';
$subject = '11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

( ^ ) 括号里的匹配符,匹配字符串开始位置,一串字符串,必须从这里开始

$pattem = '/^[a-z]/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

( $ ) 括号里的匹配符,匹配字符串结束位置

$pattem = '/[a-z]$/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

三、量词(限定符)

{n} 表示前面原子出现 n 次

$pattem = '/[0-9]{3}/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

{n,} 表示前面原子出现不少于 n 次

$pattem = '/[0-9]{1,}/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

{n,m} 表示前面原子至少出现 n 次,最多出现 m 次

$pattem = '/[0-9]{1,3}/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

( * ) 匹配 0 次、1 次或多次前面原子

    $pattem = '/[0-9]*/';
    $subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
    $a = preg_match_all($pattem,$subject,$matches);
    var_dump($a);   // 输出匹配次数
    var_dump($matches); // 输出匹配结果

( + ) 匹配 1 次或多次前面原子

$pattem = '/[0-9]+/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

(?) 匹配 0 次或 1 次前面原子

$pattem = '/[0-9]?/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

四、预定义字符

\d 匹配任意一个十进制数

  • 等价于 [0-9]
$pattem = '/\d/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

\D 匹配任意一个除十进制以外的字符

  • 等价于 [^0-9]
$pattem = '/\D/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

\w 匹配任意一个字母/数字/下划线字符

  • 等价于 [0-9a-zA-Z_]
$pattem = '/\w/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

\W 匹配任意一个除字母/数字/下划线之外的字符

  • 等价于 [^0-9a-za-z_]
$pattem = '/\W/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

\s 匹配任意一个空白字符(非打印)

$pattem = '/\s/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

\S 匹配任意一个除空白字符以外的字符

$pattem = '/\S/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

\b 匹配单词边界

$pattem = '/ouyangke\b/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

\B 匹配除单词边界以外的部分

$pattem = '/yang\B/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

五、特殊字符

  • 特殊字符需要在符号前面增加\转义
  • 需转义符号: \ * + ? . | ^ $
$pattem = '/ \+ /';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk * + ? . | ^ $ [ ] ( ) ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

六、分组符

  • ( ) 匹配其整体为一个原子[模式单元],即多个原子组成的大原子
$pattem = '/(欧阳克|朱老师)|([0-9])/';
$subject = '我是欧阳克 我是朱老师 asdfsdf212fdhdfgh54674fghjfghjk78907dfghdfghdfgh';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

七、界定符


八、修正符(在界定符后面)

( U ) 表示取消贪婪模式

  • 正则表达式有:贪婪模式和懒惰模式
  • 正则表达式默认是贪婪模式
$pattem = '/ou.*/';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果
$pattem = '/ou.*/U';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk ouyangke ouyangke zhulaoshi zhulaoshi';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

( i ) 表示和模式进行匹配时忽略大小写

$pattem = '/ouyangke/i';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk OUYANGKE OUYANGKE ZHULAOSHI ZHULAOSHI';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

( s ) 被匹配的字符串将视为一行来看,包括换行符,换行符将被视为普通字符串。

  • ( . ) 括号里的匹配符,匹配除换行符之外的任意一个字符
$pattem = '/OUYANG.KE/s';
$subject = "a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk\n OUYANG\nKE OUYANG\nKE ZHULAOSHI ZHULAOSHI";
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

( x ) 模式中的空白忽略不计

$pattem = '/   0
0
0/x';
$subject = 'a11112222333344445555666677778888999900000 aaabbbcccdddeeefffggghhhiiijjjjkkkk\n OUYANGKE OUYANGKE ZHULAOSHI ZHULAOSHI';
$a = preg_match_all($pattem,$subject,$matches);
var_dump($a);   // 输出匹配次数
var_dump($matches); // 输出匹配结果

九、正则表达式优先级(1 级最大)

03-29 18:56