通常,我们需要检查一个更长的字符串中是否含有一个特定的子字符串。这种部分匹配通常比测试字符串的完全等价更有用处。
在智能表单例子中,我们希望根据反馈信息中的一些关键词来将它们发送到适当的部门。
例如,如果希望将关于Bob商店的信件发到销售经理那里,就需要知道消息中是否出现了单词"shop"(或它的派生词)。
在了解了前面所介绍的函数后,就可以使用函数explode和strtok在消息中检索每个单词,然后通过运算符“==”或函数strcmp对它们进行比较。
然而,还可以调用一个字符串函数或正则表达式匹配函数来完成相同的操作。这些函数可以用于在一个字符串中搜索一个模式。稍后,我们将依次介绍这些函数。
4.5.1 在字符串中查找字符串:strstr、strchr、strrchr和stristr
为了在一个字符串中查找另一个字符串,可以使用函数strstr、strchr、strrchr和stristr中的任意一个。
函数strstr是最常见的,它可以用于在一个较长的字符串中查找匹配的字符串或字符。请注意,在PHP中,函数strchr和strstr完全一样,虽然其函数名的意思是在一个字符串中查找一个字符,类似于C语言中的同样函数。在PHP中,这两个函数都可用于在字符串中查找一个字符串,包括查找只包含一个字符的字符串。
strstr的函数原型如下所示:
string strstr(string haystack,string needle);
你必须向函数传递一个要被搜索的子字符串参数和一个目标关键字字符串参数。如果找到了目标关键字的一个精确匹配,函数会从目标关键字前面返回被搜索的字符串,否则返回值为false。如果存在不止一个目标关键字,返回的字符串从出现第一个目标关键字的位置开始。
例如,在智能表单应用程序中,可以按如下方式决定将邮件送到哪里:
$toaddress='[email protected]';//the default value
//Change the$toaddress if the criteria are met
if(strstr($feedback,'shop'))
$toaddress='[email protected]';
else if(strstr($feedback,'delivery'))
$toaddress='[email protected]';
else if(strstr($feedback,'bill'))
$toaddress='[email protected]';
首先,这段代码将检查反馈信息中特定的关键字,然后将邮件发送给适当的人。例如,如果客户的反馈信息是"I still haven't received delivery of my last order",以上代码就将找到字符串"delivery",这样该反馈信息就将被送到[email protected]。
函数strstr有两个变体。第一个变体是stristr,它几乎和strstr一样,其区别在于不区分字符大小写。对于我们的智能表单应用程序来说,这个函数非常有用,因为用户可以输入"delivery"、"Delivery"或"DELIVERY"以及其他大小写混合的情况。
第二个变体是strrchr,它也几乎和strstr一样,但会从最后出现目标关键字的位置的前面返回被搜索字符串。