php中的字符串和正則表達式
一、字符串类型的特点
1、PHP是弱类型语言,其它数据类型一般都能够直接应用于字符串函数操作。
1: <? php
2: echo substr("123456",2,4); //输出345
3: echo substr(123456,2,4); //输出345
4: echo hello; //先查找hello常量,若没找到,将hello看做字符串使用
5: ?>
2、字符串能够作为“数组”,是字符的集合。
1: <?php
2: $str = "www.ido321.com";
3: echo $str[0];
4: echo $str[1];
5: echo $str[2];
6: ?>
可是字符串不是真的数组,不能使用数组的函数.如count($str)不会返回字符串长度。PHP引擎无法区分字符和数组,产生二义性。
自PHP4起。已经用花括号替代方括号。
1: <?php
2: //为保证向后兼容,方括号仍然能够使用
3: $str = "www.ido321.com";
4: echo $str{0};
5: echo $str{1};
6: echo $str{2};
7: ?>
3、双引號变量解析
在PHP中,当用双引號或者定界符定义字符串时,当中的变量会被解析。
1: <? php
2: $arr = array('name' => "dwqs",'add' => "www.ido321.com");
3: echo "$arr[name]"; //能够解析。可是在方括号里不能使用引號
4: //echo "$arr['name']"; 错误
5: echo "{$arr['name']}"; //能够解析,用花括号包括元素,name不带引號也是能够的
6:
7: //如果存在对象$square
8: echo "$square->width"; //能够解析
9: echo "$square->width00 cent"; //不能够解析。用花括号解决
10: echo "{$square->width}width00 cent"; //能够解析
11: ?>
二、字符串输出函数
三、经常使用的字符串格式函数
PS:PHP的字符串处理函数大部分不正确源字符串做改动,而是返回新的字符串
四、正則表達式
正則表達式描写叙述了一种字符串匹配的模式,通过这个模式在特定的函数中对字符串进行匹配、查找、替换和分隔等操作。由原子、元字符和模式修正符三部分组成的文字模式。
在PHP中,有两套正则的处理函数库:PCRE和POSIX。前者以preg_前缀命名,与Perl兼容;后者以ereg_前缀命名。二者功能相似,但PCRE的效率略高。
与Perl语言兼容的正則表達式处理函数:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
1、语法
1.1 定界符:在与Perl兼容的正则函数中使用模式时,必须给模式加上定界符。除了字母、数字和反斜线(\)之外的不论什么字符都能够作为定界符号
1: <?php
2: //下面正则合法
3: echo $m1 = '/<\/\w+/';
4: echo $m2 = '|(\d{3})-\d|Sm';
5: echo $m3 = '!^(?i)php[34]!';
6: echo $m4 = '{^\s+(\s+)?$}';
7: ?>
1.2 原子:原子包括了普通字符。如字母、数字;非打印字符,如空格、回车。特殊字符和元字符。如引號、*、+等。必须用”\”进行转义;自己定义原子表,如[apj]、[a-z]。通用字符类型。如\d、\D。
1: <? php
2: //以下二者等价,匹配e-mail
3: $mail1 = '/^[0-9a-zA-Z]+@[0-9a-zA-Z]+(\.[0-9a-zA-Z]+){0,3}$/';
4: $mail2 = '/^\w+@\w+(\.\w+){0,3}$/';
5: ? >
1.3 元字符:用于构建正則表達式的具有特殊含义的字符。
Perl能够使用各种元字符来搜索匹配,如*、+、?.常见的元字符例如以下
1.4 模式修正符:在正则的定界符之外使用,扩展正则在匹配、替换等方面的功能。
2.与Perl兼容的正則表達式函数
2.1 preg_match(string pattern,string subject[,array matches]):用于对字符串的查找和匹配。參数说明:
pattern是正则,subject是须要处理的字符串,可选的matches用于保存于pattern的各个子模式的匹配结果,matches[0]保存了与pattern匹配的总体内容,matches[1]保存了pattern中第一个小括号里匹配的内容,以此类推。
1: <?php
2: header("content-type:text/html;charset=utf8");
3: $pattern = '/(http):\/\/(www)\.([^\.\/]+)\.(com|net|org)/i';
4: $subject = "我的博客:http://www.ido321.com";
5: if(preg_match($pattern, $subject,$matches)){
6: echo "搜索的URL是:".$matches[0]."<br/>"; //数组第1个元素保存整个匹配结果
7: echo "URL中的协议是:".$matches[1]."<br/>";//数组第2个元素保存第1个字表达式
8: echo "URL中的主机是:".$matches[2]."<br/>";//数组第3个元素保存第2个字表达式
9: echo "URL中的域名是:".$matches[3]."<br/>";//数组第4个元素保存第3个字表达式
10: echo "URL中的顶域是:".$matches[4]."<br/>";//数组第5个元素保存第4个字表达式
11: }
12: ?>
结果
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTA0Mzg0Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
preg_match_all()与preg_match()函数类似。不同的是前者会一直匹配到字符串末尾,后者在第一次匹配后就停止匹配。
2.2 preg_grep(string pattern,array iput):匹配数组中的元素,返回与正则匹配的数组单元。參数说明:
pattern是正则。input是须要匹配的数组。
1: <? php
2: $arr = array('Linux RedHat9.0','Apache2.2.9','MySQL5.0.51','PHP5.2.6','LAMP','100');
3: $version = preg_grep('/^[a-zA-Z]+(\d|\.)+$/',$arr);
4:
5: //输出:Array([1]=>Apache2.2.9 [2]=>MySQL5.0.51 [3]=>PHP5.2.6)
6: print_r($version);
7: ? >
2.3 preg_replace(mixed pattern,mixed replacement,mixed subject[,int limit]):字符串替换。说明:
该函数会在subject中搜索与pattern的匹配项,并用replacement替换。limit用于限制匹配的次数。即替换的次数。
1: <?php
2: $pattern = '/<[\/\!]*? [^<>]*? /is';
3: $text = '这个文本有<b>粗体</b>和<u>带有下划线</u>以及<i>斜体</i>';
4: echo preg_replace($pattern,"",$text); //将全部HTML标记替换为空
5: echo preg_replace($pattern,"",$text,2); //值替换前2个HTML标记
6: ? >
2.4 preg_split(string pattern,string subject[,int limit[,int flags]]):对字符串进行切割。
说明:
函数返回一个数组。
数组元素包括subject中与pattern匹配作为边界所切割的字符串。limit含义见2.3,flags含义请參考文档。
1: <? php
2: //按任数量的空格切割字符串
3: $kerwords = preg_split("/[\s,]+/","hypertext language,programming");
4:
5: //输出:Array([0]=>hypertext [1]=>language,[2[=>programming)
6: print_r($kerwords);
7: ? >
php中的字符串和正則表達式的更多相关文章
- python之路-------字符串与正則表達式
1.1.#####去掉字符串中的转义符string.strip() print "hello\tworld\n" >>> word="\thello w ...
- JAVA中正則表達式总结
昨天,我的朋友请教我正則表達式.我也好久没有写过正則表達式了,昨天刚好看了下如鹏网创始人杨中科老师关于正則表達式的解说.使我加深了正則表達式的印像.现我把他总结下: 很多语言,包含Perl.PHP.P ...
- 使用正則表達式的格式化与高亮显示json字符串
使用正則表達式的格式化与高亮显示json字符串 json字符串非常实用,有时候一些后台接口返回的信息是字符串格式的,可读性非常差,这个时候要是有个能够格式化并高亮显示json串的方法那就好多了,以下看 ...
- JAVA中正則表達式总结(具体解释及用途)
很多语言,包含Perl.PHP.Python.JavaScript和JScript,都支持用正則表達式处理文本,一些文本编辑器用正則表達式实现高级"搜索-替换"功能.所以JAVA语 ...
- Java正則表達式入门
众所周知,在程序开发中,难免会遇到须要匹配.查找.替换.推断字符串的情况发生,而这些情况有时又比較复杂,假设用纯编码方式解决,往往会浪费程序猿的时间及精力.因此,学习及使用正則表達式,便成了解决这一 ...
- Linux正則表達式-反复出现的字符
星号(*)元字符表示它前面的正則表達式能够出现零次或多次.也就是说,假设它改动了单个字符.那么该字符能够在那里也能够不在那里,而且假设它在那里,那可能会不止出现一个.能够使用星号元字符匹配出如今引號中 ...
- python进阶十_正則表達式(一)
近期状态一直不太好,至于原因,怎么说呢,不好说,总之就是纠结中覆盖着纠结,心思全然不在点上,希望能够借助Python的学习以及博客的撰写来调整回来,有的时候回头想一想,假设真的是我自己的问题呢,曾经我 ...
- DOM笔记(十):JavaScript正則表達式
一.RegExp ECMAScript通过RegExp类型类支持正則表達式,语法和Perl类似: var exp = /pattern/flags; patternb部分是不论什么简单的或复杂的正則表 ...
- iOS正則表達式(一)
什么是正則表達式? 正則表達式是对字符串操作的一种逻辑公式. 作用? 在iOS开发中我们通常使用正則表達式来匹配给定的字符串是否符合我们的业务逻辑,比方说用户注冊帐号仅仅能是手机号或者邮箱等.我们还能 ...
随机推荐
- 修复受损的linux引导
想来楼主玩linux差不多近20年了,从redhat,mandrke,manjaro,汉化,听歌.看电视电影.上网.打游戏.配置打印机等,碰到的问题一一解决了,但是一直对装好linux后重新安装win ...
- 解决 Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的方法
Mac OS X 下基于 Java 的程序(如 IntelliJ IDEA.jEdit 等)会出现中文标点输入无效的问题,在中文输入法状态,可以输入中文字,但输入中文标点最后上去的是英文标点.查阅了相 ...
- java使用DBCP连接池创建工具类
1.说明 java中有个扩展包 javax下面有个DataResource的接口 javax.sql.DataResource 该接口定义了连接池的方法规范 而DBCP框架有apache公司开发,他 ...
- hdu 2136(质数筛选+整数分解)
Largest prime factor Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 牛客网 牛客小白月赛2 A.数字方阵-反魔方阵,梁邱构造法
天坑未补... 水一波博客,再不写博客就咸成鱼干了,只写题不写题解,过一段时间就忘了自己学过什么了. 最近重点就是把开学以来写的题补出来,没学的就滚去学会啊(= =),填一下坑... 从这篇博客开始, ...
- Swoole MySQL 连接池的实现
目录 概述 代码 扩展 小结 概述 这是关于 Swoole 入门学习的第八篇文章:Swoole MySQL 连接池的实现. 第七篇:Swoole RPC 的实现 第六篇:Swoole 整合成一个小框架 ...
- SQLite复杂表的更新方式
SQLite复杂表的更新方式 在SQLite中,如果早期设计的表无法满足需要,就需要对表进行更新,如修改名字.添加列.如果针对简单表,修改起来相对容易,直接使用提供的ALTER命令即可.但是如果该 ...
- POJ 1054 The Troublesome Frog 枚举
这个题分类是dp,想了一会没有想出来,就去看别人题解了.发现别人题解全是暴力枚举= =.复杂度超过 N^2,但可能是剪枝的作用,没有超时. 思路:将所有点按坐标由小到大排序.两两枚举点p1,p2,并判 ...
- word 插入空白偶数页(论文、报告等写作常用)
目前在写大论文的过程中,需要在偶数页中插入一个空白页,但是又不想在下面加上页码,所以采用通常的方式并不妥,所以就用到了这篇博文中内容,采用奇偶页的方式插入空白偶数页,而且偶数页也不会在上面出现任何的字 ...
- ios开发小结之app发布升级
在近两个月的开发中,遇到了挺多问题的,几天加班加点,最后还是在年前发布并更新了一个版本,欢迎下载无觅下载. 最头疼的问题是提交app审核,之前的工程不太规范,导致一些文件icon没有设置好,直接val ...