当有人写:
"东京附近">
我想首先检查$search是否包含"near",如果包含,则将"Tokyo"带入可变的$location。
我试过这个:
if(strpos($search, 'near') == true){
$search = explode("near ", $location);
echo $location;
exit();
}
不起作用,它不执行if语句
这里有多个错误:
strpos
可能返回0,这表示匹配,但不会与true
进行比较strpos
区分大小写,这将使您的示例不起作用(请查看stripos
(explode
也区分大小写
使用正则表达式可能最简单:
$input = "Near Tokyo";
if (preg_match('/nears+(w+)/i', $input, $matches)) {
echo "Near: ".$matches[1]."n";
}
else {
echo "No match.n";
}
在实际操作中查看。
这个特定的正则表达式将只匹配"near"之后的下一个单词,但可以根据您的要求进行修改。
strpos
的返回类型为int,而不是bool
http://php.net/manual/en/function.strpos.php
所以使用(根据手册页面(这个:
if(strpos($search, 'near') !== false)
将其更改为:
if(strpos($search, 'near') !== false){
$search = explode("near ", $location);
echo $location;
exit();
}
只要看一下解释这种行为的文档:
很容易将返回值误认为"在位置0"one_answers"找不到字符"。以下是如何检测差异:
<?php $pos = strrpos($mystring, "b"); if ($pos === false) { // note: three equal signs // not found... } ?>
是的,strpos
,繁琐的布尔结果处理。您可能应该或者应该使用stristr
,它也是不区分大小写的:
if (stristr($search, "Near")) {
既然您无论如何都在提取文本,为什么不使用正则表达式呢?(人们经常使用可怕的爆炸解决方法。(
if (preg_match("'Near (S+)'i", $search, $match)) {
echo $match[1];
}
使用它可以得到一个结果:
if(strpos($search, 'near') !== false){
$location = explode("near ", $search);
print_r($location);
exit();
}
$search = "Near Tokyo";
if(strpos($search, 'Near') === 0){
$location = explode("Near ", $search);
echo $location[1];
exit();
}
<?php
$search = "Near Tokoyo";
if(preg_match("/near ([a-z]+)/i", $search, $match))
{
$location = $match[1];
echo $location;
}
?>
编辑:
修复了代码中的一些错误。
if(stripos($search, 'near') !== false){
$location = explode("near ", $search);
echo $location[0];
exit();
}