正则表达式

2018-01-04  本文已影响0人  code_nerd

正则表达式在开发中不会频繁使用,但是需要使用的时候就需要去查阅,这里做一下学习笔记

正则表达式的作用

匹配 分割 替换 查找

正则表达式主要由两部分组成,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
上一篇 下一篇

猜你喜欢

热点阅读