检查并获得“”之后的文本;接近“;在php中

  • 本文关键字:文本 接近 php 之后 php
  • 更新时间 :
  • 英文 :


当有人写:

"东京附近">

我想首先检查$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();
}

最新更新