RegExp

来自技术笔记
跳到导航 跳到搜索

资料[编辑 | 编辑源代码]

php.net

表达式可视化

范例

不捕获,不在预查询 ?=[编辑 | 编辑源代码]

() 里的字符不捕获,也不会在预查询里显示

<?php
$content = 'Windows2000';

preg_match('/Windows(95|98|NT|2000)/', $content, $matches);

print_r($matches);

// Array
// (
//    [0] => Windows2000
//    [1] => 2000
// )

# 加上的话

preg_match('/Windows(?=95|98|NT|2000)/', $content, $matches);

// Array
// (
//     [0] => Windows
// )

范例[编辑 | 编辑源代码]

要替换东西,你可能会使用:

echo preg_replace('/(Windows) 2000/', "$1 2008", $content);

这里可以使用:

echo preg_replace('/(?<=Windows )2000/', "2008", $content);

虽然字符长度一样

不匹配 ?![编辑 | 编辑源代码]

与 ?= 相比,?! 取反

只是不捕获 ?:[编辑 | 编辑源代码]

不捕获。默认在预查询里,所以 preg_replace 时,会被替换为空,那么就要使用 ?=,不捕获,也不显示在预查询里。

// Array
// (
//     [0] => Windows2000
//)

在线测试[编辑 | 编辑源代码]

https://www.phpliveregex.com/

教程[编辑 | 编辑源代码]

https://www.regular-expressions.info

charset

http-equiv

$pattern = '/http-equiv=[\'"]?Content-Type[\'"]?\scontent=.*?charset=(.*?)[\'"]/si';

meta charset=

$pattern = '/<meta.*?charset=[\'"](.*?)[\'"].*?>/si';

命令组[编辑 | 编辑源代码]

$regex='/(?P<name>\w)abc/';
$str="fabcf";
echo preg_match_all($regex, $str,$matches);
print_r($matches);

反向引用[编辑 | 编辑源代码]

未命令组反向引用[编辑 | 编辑源代码]

$regex = '/(\w)(\w)\2\1/';
$str = 'abba';
$matches = array();
 
if(preg_match($regex, $str, $matches)){
    print_r($matches);
}

命名组反向引用[编辑 | 编辑源代码]

\k<name >

不捕获组[编辑 | 编辑源代码]

(?:pattern)

比如 (?:666|233)

$regex='/(?:666|233)滑稽实验室/';
$str="233滑稽实验室";
preg_match_all($regex, $str,$matches);
print_r($matches);

参见[编辑 | 编辑源代码]