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开发中我们通常使用正則表達式来匹配给定的字符串是否符合我们的业务逻辑,比方说用户注冊帐号仅仅能是手机号或者邮箱等.我们还能 ...
随机推荐
- Guava源码学习(零)前言
Guava是由Google出品的Java类库,功能强大且易用. 后续我会用多篇博客介绍Guava的使用方法,以及从源码层面分析其实现原理. 分析次序基于Guava的官方Wiki 基于版本:Guava ...
- js坑 把数字型的字符串默认为数字 把前面的0给去掉了("001")
<script> b("); function b(id) { console.log("b函数的id:"+id); //var history = &quo ...
- 003为什么shell的配置文件那么繁琐?
Bash的设置之所以如此繁琐,是由于历史原因造成的.早期的时候,计算机运行速度很慢,载入配置文件需要很长时间,Bash的作者只好把配置文件分成了几个部分,阶段性载入. 系统的通用设置放在 /etc/p ...
- 服务器出现大量close_wait,我们来说说到底是怎么回事?(以tomcat为例)
一.问题描述 最近一直忙得很,好久没写博客.前两天,微信收到个好友申请,说是想问问close_wait的事情. 找他问了些详细信息,大概了解到,他们后端服务是tomcat 7, jdk 7,cento ...
- MySQL 如何优化cpu消耗
目录 谁在消耗cpu? 祸首是谁? 用户 IO等待 产生影响 如何减少CPU消耗? 减少等待 减少计算 升级cpu 谁在消耗cpu? 用户+系统+IO等待+软硬中断+空闲 祸首是谁? 用户 用户空间C ...
- SQLite添加列的限制
SQLite添加列的限制 向SQLite表中添加字段,需要注意以下问题: (1)添加的列不能定义为主键. (2)添加的列为日期时间类型,不能使用CURRENT_TIME.CURRENT_DATE. ...
- 2016北京集训测试赛(九)Problem C: 狂飙突进的幻想乡
Solution 我们发现, 对于一条路径来说, 花费总时间为\(ap + q\), 其中\(p\)和\(q\)为定值. 对于每个点, 我们有多条路径可以到达, 因此对于每个区间中的\(a\)我们可以 ...
- Linux网络协议栈之数据包处理过程
http://blog.csdn.net/cheng_fangang/article/details/8966242
- django常用第三方app大全
djangoapp 资源大全 最近经常在这个版面看到Django相关扩展的介绍,而其一个扩展写一个帖子,觉得没太必要吧. 以前整理的django资源列表,从我的wiki上转过来的. 要找django资 ...
- ThinkPHP示例:CURD
完整的控制器文件: class IndexAction extends Action { // 查询数据 public function index() { $Form = M("Form& ...