php字符串与正则表达式试题 Zend权威认证试题讲解
字符串是PHP的“瑞士军刀”——作为一种Web开发语言,PHP最常打交道的就是字符串。因此对于开发者来说,处理字符串是一项非常基础的技能。
幸运的是,由于PHP开发团队的努力,PHP对字符串的处理相当易学。你只需迈过第一个难关,接下来就一马平川了。
但是,PHP的这一部分功能并非完美。本章考验你对字符串的了理解及对处理字符串的函数的认识。此外,你还必须面对正则表达式——一个非常有用,却总是被开发者忽试的工具——的编写艺术。
问题
1.考虑如下脚本。标记处应该添加什么代码才能让脚本输出字符串php?
PHP代码:
| 
 以下是代码片段:  | 
A.echo chr($val);
B.echo asc($val);
C.echo substr($alpha, $val, 2);
D.echo $alpha{$val};
E.echo $alpha{$val+1}
2.以下哪一项不能把字符串$s1和$s2组成一个字符串?
A.$s1 + $s2
B."{$s1}{$s2}"
C.$s1.$s2
D.implode('', array($s1,$s2))
E.以上都可以
3.变量$email的值是字符串user@example.com,以下哪项能把字符串转化成example.com?
A.substr($email, strpos($email, "@"));
B.strstr($email, "@");
C.strchr($email, "@");
D.substr($email, strpos($email, "@")+1);
E.strrpos($email, "@");
4.给定一个用逗号分隔一组值的字符串,以下哪个函数能在仅调用一次的情况下就把每个独立的值放入一个新创建的数组?
A.strstr()
B.不可能只调用一次就完成
C.extract()
D.explode()
E.strtok()
5.要比较两个字符串,以下那种方法最万能?
A.用strpos函数
B.用==操作符
C.用strcasecmp()
D.用strcmp()
6.以下哪个PCRE正则表达式能匹配字符串php|architect?
A..*
B....|.........
C.d{3}|d{8}
D.[az]{3}|[az]{9}
E.[a-z][a-z][a-z]|w{9}
7.以下哪些函数能用来验证字符串的完整性?(三选)
A.md5()
B.sha1()
C.str_rot13()
D.crypt()
E.crc32()
8.哪个PHP函数与以下脚本在UNIX系统下执行的效果近似?
PHP代码:
| 
 以下是代码片段:  | 
A.fopen()
B.fread()
C.flock()
D.split_string()
E.file()
9.基于指定的式样(pattern)把一个字符串分隔开并放入数组,以下哪些函数能做到?(双选)
A.preg_split()
B.ereg()
C.str_split()
D.explode()
E.chop()
10.以下脚本输出什么?
PHP代码:
| 
 以下是代码片段:  | 
A.Testing 1245
B.Testing 345
C.Testing 1+245
D.245
E.什么都没有
11.以下脚本输出什么?
PHP代码:
| 
 以下是代码片段:  | 
A.12345
B.12245
C.22345
D.11345
E.Array
12.方框中的正则表达式能与以下哪些选项匹配?(双选)
PHP代码:
/.**123d/
A.******123
B.*****_1234
C.******1234
D._*1234
E._*123
13.以下哪个比较将返回true?(双选)
A.'1top' == '1'
B.'top' == 0
C.'top' === 0
D.'a' == a
E.123 == '123'
14.如果用+操作符把一个字符串和一个整型数字相加,结果将怎样?
A.解释器输出一个类型错误
B.字符串将被转换成数字,再与整型数字相加
C.字符串将被丢弃,只保留整型数字
D.字符串和整型数字将连接成一个新字符串
E.整形数字将被丢弃,而保留字符串
15.考虑如下脚本。假设http://www.php.net能被访问,脚本将输出什么?
PHP代码:
| 
 以下是代码片段:  | 
A.www.php.net的主页的字符数
B.剔除<p>标签后的www.php.net主页的字符数
C.1
D.0
E.剔除<p>以外的标签后的www.php.net主页的字符数
16.哪个函数能不区分大小写得对两个字符串进行二进制比对?
A.strcmp()
B.stricmp()
C.strcasecmp()
D.stristr()
E.以上都不能
17.以下哪些函数能把字符串里存储的二进制数据转化成十六进制?(双选)
A.encode_hex()
B.pack()
C.hex2bin()
D.bin2hex()
E.printf()
18.哪个函数能用来确保一个字符串的字符数总是大于一个指定值?
答案:____________
19.以下脚本输出什么?
PHP代码:
| 
 以下是代码片段:  | 
答案:____________
20.以下脚本输出什么?
PHP代码:
| 
 以下是代码片段:  | 
A.x
B.axle
C.axxle
D.applex
E.xapple
答案速查
1:D
2:A
3:D
4:D
5:D
6:E
7:ABE
8:E
9:AD
10:D
11:B
12:CD
13:BE
14:B
15:C
16:C
17:BD
18:str_pad
19:ablecostscindy
20:B
答案详解
1.substr函数能够胜任,但考虑到输出三个字母就需要三次调用该函数,所以排除此方法。那么$alpha{$val}和$alpha{$val+1}是仅有的两个可能输出题目要求的字符串的选项。因为0是数组的第一个索引,所以答案是D。
2.除了A以外的选项都能输出题目要求的字符串。PHP中,加号(+)不能把两个字符串合并成一个。
3.substr函数返回字符串的一部分,而strpos函数擅长从一个字符串中找出某个指定的子串。同时使用这两个函数将满足题目要求。注意,前一个函数从0开始索引,而后者不是,因此需要+1。答案是D。
4.答案是D。explode函数使用一个字符串分隔另一个字符串,并把结果放入一个新建的数组。strtok函数也可以做同样的事,但需要多次调用。
5.答案是D。strcmp()提供了安全的字符串比较机制。注意,选项C是错的,strcasecmp()不是一个“万能”函数,因为它不区分大小写。
6.选项中没有一个正则表达式能真正代表题目所给字符串的匹配方式,但是选项A和E仍然能勉强匹配。选项A太普通了,它能够匹配任何字符串,因此答案是E。
7.正确答案是A,B和E。用crypt()和str_rot13()来验证一个字符串是否被改变,效率很低。crc32()比前面两个函数好些,如果能容忍一些小错误的话,它是个不错的选择。
8.file函数将文件的文本内容读入一个数组,每个元素是一行。因此答案E正确。也许你想知道为什么要把这样一个题目放在讲字符串的章节中,那是为了提醒你每一章的题目所包含的知识点并不是绝对严格区分开的,正如写PHP脚本时,file函数不能脱离字符串函数单独存在一样。
9.尽管条件不同,但preg_split和explode函数都能满足题目要求。ereg()拿一个正则表达式匹配一个字符串;str_split()按固定长度分隔字符串;而chop()则是rtrim()别名,用来移除字符串末尾处的空格。
10.本题考察你对字符串操作及操作符优先级的认识。连接运算符(.)的优先级比加号(+)高。因此PHP解释器实际执行的运算可以表示为('Testing ' . 1) + (2 . '45')。由于字符串test 1不是数字,所以加号前面的运算等于0。加号后面的运算等于245,PHP输出的结果是0+245,等于245,所以答案是D。
11.可以用访问数组元素的方式访问字符串中的字符,因此脚本只是把字符串中的第二个字符($s[1])替换成了字符2,最终将输出12245。答案是B。
12.本题的要点是理解这个正则表达式的含义——从左往右,首先是零个或多个任意字符(.*),跟着是一个星号(*),然后是123,最后是一个数字。因此答案是C和D。
13.B和E正确。选项B中,在比较时,字符串top等同于数字0。==操作符不比对数据类型,所以将返回true。答案E中,字符串123等同于数字123,比较将返回true。
14.字符串将被转换成数字(如果无法发生转换就是0),然后与整型数字相加。答案是B。
15.代码的本意是剔除www.php.net主页上除了p以外的的所有HTML标签。可实际上,在代码的最后一行使用了count函数,它统计变量中的元素数量,而不是字符串中的字符数。由于字符串是标量,对字符串使用count函数将永远返回1。答案是C。
16.题目其实就是在描述strcasecmp函数的作用,因此答案是C。
17.正确答案是B和D。pack函数能对二进制数据进行复杂的格式化,包括将字符串中的字符转化成十六进制表示。bin2hex函数也有同样的转化功能。注意,printf()能将整数转化成十六进制数,但无法转化字符串。
18.这是在说str_pad函数,它可以把字符串填充到指定长度。
19.脚本将输出ablecostscindy。wordwrap函数通常用来把字符串切割成指定长度。然而在本题中,长度被设置为1,因此函数将从空格处切割(第四个参数被设置为false,因此函数不会从单词的中间进行切割)。填充字符串是c,等于把每个空格都换成了c。
20.substr_replace函数是用一个指定字符串替换原字符串中的某个部分,因此脚本输出axle,答案是B。
php字符串与正则表达式试题 Zend权威认证试题讲解的更多相关文章
- 通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复、排序
		
通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复.排序 <?php $subject = file_get_contents('test.txt'); $pattern = '/ ...
 - 30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)
		
前言 本文以前端面试官的角度出发,对 Vue 框架中一些重要的特性.框架的原理以问题的形式进行整理汇总,意在帮助作者及读者自测下 Vue 掌握的程度.本文章节结构以从易到难进行组织,建议读者按章节顺序 ...
 - php开发面试题---php面试题英语(How do you debug a PHP application)
		
php开发面试题---php面试题英语(How do you debug a PHP application) 一.总结 一句话总结: xdebug or use die() do it; 1.Whi ...
 - 字符串处理(正则表达式、NSScanner扫描、CoreParse解析器)-备用
		
搜索 在一个字符串中搜索子字符串 最灵活的方法 1 - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptio ...
 - python字符串及正则表达式[转]
		
原文链接:http://www.cnblogs.com/guojidong/archive/2012/12/20/2826388.html 字符串: 正则表达式 正则表达式元字符与语法图: 注意事项: ...
 - 零基础学Python--------第5章 字符串及正则表达式
		
第5章 字符串及正则表达式 5.1 字符串常用操作 在Python开发过程中,为了实现某项功能,经常需要对某些字符串进行特殊处理,如拼接字符串.截取字符串.格式化字符串等.下面将对Python中常用的 ...
 - R5—字符串处理/正则表达式
		
R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr.strsplit.paste.regexpr这几个了.实际上R关于字符串处理的功能是非常强大的 ...
 - C#高级编程9-第9章 字符串和正则表达式
		
字符串和正则表达式 String类 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显 ...
 - 转义字符的理解(JAVA、字符串和正则表达式)
		
一.原理总结: 要理解转义,首先要从正则表达式说起. 在正则表达式中:*和\是特殊字符:为了匹配这两个字符本身,正则表达式中需要写为\*和\\ 在Java中,只能用字符串表示正则表达式,所以需要把\* ...
 
随机推荐
- Linux Rsync
			
一.Rsync介绍 1.什么是Rsync Rsync 即Remote Rynchronization,是一款开源的.快速的.多功能的.可实现全量或增量的本地或者远程数据镜像同步复制.备份的优秀工具. ...
 - Android调用天气预报的WebService简单例子
			
下面例子改自网上例子:http://express.ruanko.com/ruanko-express_34/technologyexchange5.html 不过网上这个例子有些没有说明,有些情况不 ...
 - POJ 3150 Cellular Automaton(矩阵乘法+二分)
			
题目链接 题意 : 给出n个数形成环形,一次转化就是将每一个数前后的d个数字的和对m取余,然后作为这个数,问进行k次转化后,数组变成什么. 思路 :下述来自here 首先来看一下Sample里的第一组 ...
 - (转)STL中set的用法
			
转载自here 1.关于set map容器是键-值对的集合,好比以人名为键的地址和电话号码.相反地,set容器只是单纯的键的集合.例如,某公司可能定义了一个名为bad_checks的set容器,用于记 ...
 - hdu 4768 Flyer 二分
			
思路:由于最多只有一个是奇数,所以二分枚举这个点,每次判断这个点的左边区间段所有点的和作为 二分的依据. 代码如下: #include<iostream> #include<cstd ...
 - Java IO(四)
			
对象序列化 对象序列化又叫对象的持久化,对象的串行化(或反串行化) 当使用Serializable接口实现序列化操作时,如果一个对象中的某个属性不希望被序列化,则可以使用transient关键字进行声 ...
 - java如何追加写入txt文件
			
java中,对文件进行追加内容操作的三种方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import java.io.BufferedWriter; import ...
 - mmap 的理解
			
mmap 的理解 采用共享内存通信的一个显而易见的好处 是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存 ...
 - socket异步编程--libevent的使用
			
使用 libevent 和 libev 提高网络应用性能 http://www.ibm.com/developerworks/cn/aix/library/au-libev/ libevent实现ht ...
 - Ubuntu rsync同步
			
>服务器端:Ubuntu 9.10 - 192.168.1.3客户端:Ubuntu 10.04 - 192.168.1.73 我们先来设置一下服务器端的配置 1.ubuntu系统安装完之后,rs ...