字符串是PHP的“瑞士军刀”——作为一种Web开发语言,PHP最常打交道的就是字符串。因此对于开发者来说,处理字符串是一项非常基础的技能。
幸运的是,由于PHP开发团队的努力,PHP对字符串的处理相当易学。你只需迈过第一个难关,接下来就一马平川了。
但是,PHP的这一部分功能并非完美。本章考验你对字符串的了理解及对处理字符串的函数的认识。此外,你还必须面对正则表达式——一个非常有用,却总是被开发者忽试的工具——的编写艺术。

问题

1.考虑如下脚本。标记处应该添加什么代码才能让脚本输出字符串php?

PHP代码:

以下是代码片段:
<?php
$alpha = 'abcdefghijklmnopqrstuvwxyz';
$letters = array(15, 7, 15);
foreach($letters as $val) {
        /* 这里应该加入什么 */
}
?>

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代码:

以下是代码片段:
<?php
function my_funct ($filename)
{
        $f = file_get_contents ($filename);
        return explode ("n", $f);
}
?>

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代码:

以下是代码片段:
<?php
echo 'Testing ' . 1 + 2 . '45';
?>

A.Testing 1245
B.Testing 345
C.Testing 1+245
D.245
E.什么都没有

11.以下脚本输出什么?

PHP代码:

以下是代码片段:
<?php
$s = '12345';
$s[$s[1]] = '2';
echo $s;
?>

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代码:

以下是代码片段:
<?php
$s = file_get_contents ("http://www.php.net");
strip_tags ($s, array ('p'));
echo count ($s);
?>

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代码:

以下是代码片段:
<?php
$a = 'able osts indy';
echo wordwrap ($a, 1, "c", false);
?>

答案:____________

20.以下脚本输出什么?

PHP代码:

以下是代码片段:
<?php
$x = 'apple';
echo substr_replace ($x, 'x', 1, 2);
?>

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权威认证试题讲解的更多相关文章

  1. 通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复、排序

    通过编写PHP代码并运用“正则表达式”来实现对试题文档进行去重复.排序 <?php $subject = file_get_contents('test.txt'); $pattern = '/ ...

  2. 30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)

    前言 本文以前端面试官的角度出发,对 Vue 框架中一些重要的特性.框架的原理以问题的形式进行整理汇总,意在帮助作者及读者自测下 Vue 掌握的程度.本文章节结构以从易到难进行组织,建议读者按章节顺序 ...

  3. 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 ...

  4. 字符串处理(正则表达式、NSScanner扫描、CoreParse解析器)-备用

    搜索 在一个字符串中搜索子字符串 最灵活的方法 1 - (NSRange)rangeOfString:(NSString *)aString options:(NSStringCompareOptio ...

  5. python字符串及正则表达式[转]

    原文链接:http://www.cnblogs.com/guojidong/archive/2012/12/20/2826388.html 字符串: 正则表达式 正则表达式元字符与语法图: 注意事项: ...

  6. 零基础学Python--------第5章 字符串及正则表达式

    第5章 字符串及正则表达式 5.1 字符串常用操作 在Python开发过程中,为了实现某项功能,经常需要对某些字符串进行特殊处理,如拼接字符串.截取字符串.格式化字符串等.下面将对Python中常用的 ...

  7. R5—字符串处理/正则表达式

    R通常被用来进行数值计算比较多,字符串处理相对较少,而且关于字符串的函数也不多,用得多的就是substr.strsplit.paste.regexpr这几个了.实际上R关于字符串处理的功能是非常强大的 ...

  8. C#高级编程9-第9章 字符串和正则表达式

    字符串和正则表达式 String类 String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显 ...

  9. 转义字符的理解(JAVA、字符串和正则表达式)

    一.原理总结: 要理解转义,首先要从正则表达式说起. 在正则表达式中:*和\是特殊字符:为了匹配这两个字符本身,正则表达式中需要写为\*和\\ 在Java中,只能用字符串表示正则表达式,所以需要把\* ...

随机推荐

  1. HDU 4597 Play Game(记忆化搜索,深搜)

    题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...

  2. MYSQL判断某个表是否已经存在

    方法一.You don't need to count anything. SELECT 1 FROM testtable LIMIT 1; If there's no error, table ex ...

  3. 无限互联IOS电影项目视频笔记

    下面是该iOS项目视频教程的内容大纲: 观看指南 (1)项目为第一阶段内容 (2)需要熟练掌握OC语言 (3)UI部分需要学习到第十节课 (4)项目适合刚入门的iOS开发者 1.第一天 (1)iOS ...

  4. MongoDB (八) MongoDB 文档操作

    一. MongoDB 插入文档 insert() 方法 要插入数据到 MongoDB 集合,需要使用 MongoDB 的  insert() 或 save() 方法. 语法 insert() 命令的基 ...

  5. QQ群共享文件下载很慢解决办法

    QQ群共享文件下载很慢解决办法.我们经常会不群里面共享文件,文件文件稍大,下载非常慢.家庭是20M的网速,一般正常下载能够达到2.5MB左右,而在QQ群实际下载网速却只有80KB左右.如果要下1G,就 ...

  6. 淘宝设计师入门:设计师SDK环境配置

    把淘宝官方的做法先过一遍:( http://open.taobao.com/doc/detail.htm?id=102527 ) 1.配置JAVA环境http://www.cnblogs.com/ti ...

  7. left join查询结果大于原始数据

    left join onon后面一定是一个主键或者是一个值为唯一的字段吗  on后面关联的条件如果是1对1的数量就不变,如果是1对多的数量就会增加 追问: 问题就在这,我1对多了 追答: 通常的做法是 ...

  8. Data Flow ->> Pivot

    这个组件和SQL Server的Pivot基本就是一回事.不过我观察到SSIS的Pivot只支持SUM这种聚合类型,并没有找到哪个选择可以设置聚合类型,而T-SQL语法的Pivot则支持多种聚合类型, ...

  9. Windows下搭建Android开发环境

    1.下载eclipse google eclipse,到官网去下载最新版的,推荐java ee版本的,当然你要用android版本或者standard也无妨 2.下载android sdk,安装相关的 ...

  10. 蓝缘管理系统第三版推出。springMVC4.0+shiro1.2.3+spring4.x+Mybaits3.2.8

    blog.csdn.net/mmm333zzz/article/details/42059349 http://blog.csdn.net/zoutongyuan/article/details/41 ...