正则表达式在开发中不会频繁使用,但是需要使用的时候就需要去查阅,这里做一下学习笔记
正则表达式的作用
匹配 分割 替换 查找
正则表达式主要由两部分组成,pattern 和subject
pattern 是我们想要的结果集,subject 则是搜索的主体
其中pattern的一些知识 可以查阅 30分钟入门正则表达式
推荐一个博客更简单的学习正则表达式地址
//放一些常见的匹配
//匹配url
$pattern = '#^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(?::\d{1,5})?(?:$|[?\/#])#i';
//匹配邮箱
$pattern = '/^[a-z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])+\.(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i';
php中的函数查阅官方文档
正则匹配的主要工作,在于pattern的写法上,
以下做一些简单的说明
//第一个简单的php示例
$pattern = '/\d+/';//要查找的结果集 匹配一个以上的数字
$subject='dsd1230555d';//要查找的主体 字符串
$result=preg_match($pattern,$subject,$match);
var_dump($result);//打印是否匹配成功
var_dump($match);//打印匹配结果
//第一个简单的js 示例
var subject='123ddd';
var pattern =/\d+/;//不要加引号 js中的分隔符是/
var res = subject.match(pattern);//简单的理解是,js的字符串 继承自string 拥有string的函数
console.log(res);
元字符
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
限定符
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
用于,限定该字符前的
[0-9]{10}//匹配10个数字
\d{10}//匹配10个数字
[aeiou]{3,}匹配3个及其以上的aeiou
范围符
[0-9] 等价于 \d
[a-z0-9A-Z_] 等价于 \w
[aeios] 匹配aeiou 中任意一个
分支条件
a|b|c 匹配字符中的a 或者b 或者c
分组
重复单个字符(直接在字符后面加上限定符就行了);但如果想要重复多个字符又该怎么办?你可以用小括号来指定子表达式(也叫做分组),然后你就可以指定这个子表达式的重复次数了
$pattern = '#([a]\d)+#';// 匹配a1a2
$subject='a1a2345677444dd33344';//
$result=preg_match($pattern,$subject,$match);
反义
有时需要查找不属于某个能简单定义的字符类的字符。比如想查找除了数字以外,其它任意字符都行的情况,这时需要用到反义
\W 匹配任意不是字母,数字,下划线,汉字的字符
\S 匹配任意不是空白符的字符
\D 匹配任意非数字的字符
\B 匹配不是单词开头或结束的位置
[^x] 匹配除了x以外的任意字符
[^aeiou] 匹配除了aeiou这几个字母以外的任意字符
常见匹配
(?:exp) 匹配exp 且包含exp
preg_match('#Windows(?:2000|XP|7)#', 'WindowsXP2000', $matchResult1);
//打印为 WindowsXP
(?=exp) 匹配exp前面的
preg_match('#Windows(?=2000|XP|7)#', 'WindowsXP2000', $matchResult1);
//打印为 Windows
(?<=exp)匹配exp后面的
preg_match('#(?<=2000|XP|7)ssss#', 'WindowsXPssss', $matchResult1);
//打印为 ssss