php preg正则表达式的组成部分
定界符号 :
多种都可以,常用为//
原子 :
最小的一个匹配单位 (放在定界符中),在一个正则表达式中,至少要有一个原子
1,打印字符(a-z A-Z 0-9 ~!@#$%^&*()_+...)和非打印字符
2, 代表一类字符
\d :任意一个数字 [0-9]
\D :任意一个非数字 [^0-9]
\w :任意一个字 a-z A-Z 0-9 _ [a-zA-Z0-9_]
\W :任意一个非字 [^a-zA-Z0-9_]
\s :代表任意一个空白 [\t\n\f\v]
\S :代表任意一个非空白 [^\t\n\f\v]
[\x{4e00}-\x{9fa5}]:代表所有汉字,但是需要配合模式修正符u使用,不然会报错
3,自定义原子表
[fws3] :fws3任意一个字符
[^1-9a-z] :非1-9 a-z的任意一个字符
[2-9x] :2-9或者x的任意一个字符
4,点(.) 能代表所有任意一个字符
元字符 :
不是单独使用的,是用来扩展和限定原子的 (写在定界符号中)
* 用来修饰其前面的原子可以出现0个或多个(任意次) {0,}
+ 用来修饰其前面的原子出现1次或多次 {1,}
? 用来修饰前面的原子出现0次或1次 {0,1}
{n} 用来修饰其前面的原子出现n次
{n,m} 用来修饰其前面的原子出现n到m次,包括n和m
{n,} 用来修饰其前面的原子至少出现n次,包括n
| 是或的关系 ,表示它两边的原子,只要一个出现就可以了,但是 | 优先级是最低的
^ 或 \A 表示必须以什么开始,这个必须写在正则表达式的最前面
$ 或 \Z 表示必须以什么结束,这个必须写在正则表达式的最后面
\b 单词边界
\B 不是单词边界的部分
模式修正符 (单个字符)
1,模式修正符写在定界符号 ,放在右边 "/go*gle/i"
2,模式修正符号,一个字符就是一个功能,可以组合使用
作用:
修正正则表达式的解释,或扩充正则表达式的功能
i : 不区分大小写
s : 原子. 可以匹配换行符(\r)
x : 去除正则表达式里的空白
U :让 原子. 变得不贪婪 (在. 后面加? 也可以取消贪婪模式,即.*? 或.+?)
u:utf8编码。匹配汉字时使用
其他符号
() (括号)
1,改变优先级
2, 将小原子变成大原子
3,子模式,整个表达式是一个大的模式,小括号中是每个独立的子模式
4,反向引用
$preg = '/title\=\"(.+?)\"\>(\\1)\<\/a\>/'; // \\1:引用匹配的第一个子模式的内容
\1引用前面括号里的模式,即第一个模式 (?:xxx)使括号失去3,4功能
\ (转义字符)
1,可以将有意义的字符转成没有意义的原子字符 \^ \. \+ \' \" \?
2, 可以将没有意义的字符转成有意义的原子 \t \cx \f \n \r \v
3, 加上 \也没意义的字符,加不加\都没区别 \_ \q
实例
匹配网址
$reg = "/(https?|ftps?)\:\/\/(www|mail|bbs)\.(.+?)\.(com|cn|net)([\w\-\/\.\=\?\&\%]*)?/i";
preg_match("/^([\x{4e00}-\x{9fa5}]|\w|\_|\-){2,18}$/u",$_GET['name'] )
匹配邮箱
$reg = "/\w+([+-.]\w+)*@\w+([-.]\w+)*/";
函数
正则的查找
preg_match(pattern, subject ,data); //查找一个
preg_match_all(pattern, subject, data); //查找所有
正则的分割
preg_split(pattern, subject);
正则的替换
preg_replace(pattern, replacement, subject);
//一些心得
编码的问题,如果正则表达式和内容编码不同,会导致匹配不出,这时要将正则表达式\内容 转码
iconv('utf-8','gbk','/\&pn\=73\"\>尾页\<\/a\>/')
php preg正则表达式的组成部分的更多相关文章
- php preg正则表达式
Note: 反斜线在单引号字符串和双引号字符串 中都有特殊含义,因此要匹配一个反斜线, 模式中必须写为 ”\\\\”. 译注: “/\\/”, 首先它作为字符串,反斜线会进行转义, 那么转义后的结果是 ...
- Regular Expression(正则表达式)之邮箱验证
正则表达式(regular expression, 常常缩写为RegExp) 是一种用特殊符号编写的模式,描述一个或多个文本字符串.使用正则表达式匹配文本的模式,这样脚本就可以轻松的识别和操作文本.其 ...
- python 详解正则表达式的使用(re模块)
一,什么是正则表达式 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件 ...
- PHP正则表达式笔记和实例
转自: https://www.cnblogs.com/yafei236/p/4168290.html 本文主要介绍如何在PHP使用正则表达式,并附带几个实例. 这两天工作用到了正则表达式,发现自己 ...
- Python学习笔记 - day10 - 正则表达式
正则表达式 字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样 ...
- PHP正则表达式考察点
正则表达式的作用 分隔.查找.匹配.替换字符串 正则表达式的组成部分 分隔符 "/" . "#" . "~" 通用原子 \d : 十进制的0 ...
- Python - 正则表达式 - 第二十二天
正则表达式 - 教程 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"). 正则表达式使用单 ...
- Hive正则表达式
正则表达式基本语法 用圆括号将所有选择项括起来,相邻的选择项之间用|分隔.但用圆括号会有一个副作用,使相关的匹配会被缓存,此时可用?:放在第一个选项前来消除这种副作用. 其中 ?: 是非捕获元之一,还 ...
- PHP正则表达式核心技术完全详解 第1节
作者:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! CSDN@极客小俊,原创文章, B站技术分享 B站视频 : Bilibili.com 个 ...
随机推荐
- java学习笔记之IO编程—内存流、管道流、随机流
1.内存操作流 之前学习的IO操作输入和输出都是从文件中来的,当然,也可以将输入和输出的位置设置在内存上,这就需要用到内存操作流,java提供两类内存操作流 字节内存操作流:ByteArrayOutp ...
- 报错Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/...
首先我的jdk是11.05的 这个是由于: 这个是 由于缺少了javax.xml.bind,在jdk10.0.1中没有包含这个包,所以我自己去网上下载了jdk 8,然后把jdk10.0.1换成jdk ...
- 使用Beautiful Soup爬取猫眼TOP100的电影信息
使用Beautiful Soup爬取猫眼TOP100的电影信息,将排名.图片.电影名称.演员.时间.评分等信息,提取的结果以文件形式保存下来. import time import json impo ...
- Java_Day3(下)
Java learning_Day3(下) 本人学习视频用的是马士兵的,也在这里献上 <链接:https://pan.baidu.com/s/1qKNGJNh0GgvlJnitTJGqgA> ...
- AcWing 1057. 股票买卖 IV
//f[i,j,1]表示走到第i天已经进行完j次交易并且手中没有股票的所有的购买方式的集合 //f[i,j,0]表示走到第i天并且正在进行第j次交易且手中有货的所有的购买方式的集合 //属性利益最大值 ...
- springboot 扫描不到包 @SpringBootApplication 自动配置原理
解决方案 在main类中增加注解 @ComponentScan("com.test.test.*") 扫描具体的包 @ComponentScan(basePackages = {& ...
- 小总结:fibonacci数的产生
我写的一个固定的函数来嘞: ]={,}; void f() { ;i<;i++) { fib[i]=fib[i-]+fib[i-]; } } 1,1,2,3,5,8,13,21,34,55,.. ...
- 添加Usb3.0驱动到win7/8/10的usb安装光盘
文章中所有需要使用到的软件和资源在文章末尾的网盘连接中有下载 Run the DISM GUI Tool Right-click on DISM GUI.exe and select Run as A ...
- pom.xml文件中dependency标签的scope子标签
1.最近整合了公司的一个项目A,而A又依赖项目B,项目B中pom.xml中有一个依赖的<scope>provided</scope>,查了一下,原来provided属性,jar ...
- HTML代码中<%%>、<%=%>
运行.获取后台代码或值.<%%>之间可以写服务器端代码,比如<%for(var i=0;i<10;i++){//执行循环体}%>又如<%for(var i=0;i& ...