Php 查找字符串的一部分并输出整个字符串

Php 查找字符串的一部分并输出整个字符串,php,string,strpos,Php,String,Strpos,我想找到字符串的一部分,如果true我想输出它找到的整个字符串 以下是一个例子: $Towns = "Eccleston, Aberdeen, Glasgow"; $Find = "Eccle"; if(strstr($Find, $Towns)){ echo outputWholeString($Find, $Towns); // Result: Eccleston. } 如果有人能阐明如何做到这一点,并牢记这不是静态值;$Towns和$Find变量将在我的实时脚本中动态分配。您就

我想找到字符串的一部分,如果
true
我想输出它找到的整个字符串

以下是一个例子:

$Towns = "Eccleston, Aberdeen, Glasgow";
$Find = "Eccle";

if(strstr($Find, $Towns)){
    echo outputWholeString($Find, $Towns); // Result: Eccleston.
}

如果有人能阐明如何做到这一点,并牢记这不是静态值;
$Towns
$Find
变量将在我的实时脚本中动态分配。

您就快到了

这可能就是您正在寻找的:

<?php
$Towns = "Eccleston, Aberdeen, Glasgow";
$Find = "Eccle";

if(stripos($Towns, $Find)) {
    echo $Towns;
}
显然,它的输出是:
Eccleston

两项一般性意见:

  • strpos()
    /
    stripos()
    函数更适合这里,因为它们只返回一个位置,而不是足够用于给定目的的整个匹配字符串

  • 使用
    stripos()
    而不是
    strpos()
    执行不区分大小写的搜索,这可能对任务有意义

  • 使用
    preg_match()
    ,可以搜索
    Eccle
    并返回
    Eccleston
    单词

    我使用与Pearl兼容的正则表达式(PCRE)
    “#\w*”$找到。”\w*#'
    在下面的代码和代码中

    #
    字符是PCRE分隔符。搜索的模式位于这些分隔符内。有些人喜欢用
    /
    作为分隔符。
    \w
    表示单词字符。
    *
    表示前一个字符重复0次或以上。
    因此,
    #\w*Eccle\w*#
    PCRE搜索包含由一个或多个单词字符(字母)包围的
    Eccle
    的字符串

    
    
    运行代码:

    注:
    “#\w*”$找到。”\w*#'
    “#\w*$Find\w*#”
    相同(请注意周围的单引号或双引号)。请参阅。

    您必须使用搜索另一个字符串中的字符串:

    if( strpos($Towns, $Find) === false ) {
        echo $Towns;
    }
    
    请注意,您必须使用“==”来知道strps()是否返回false或0。

    使用
    explode()
    strps()

    $Towns = "Eccleston, Aberdeen, Glasgow";
    $data=explode(",",$Towns);// 
    $Find = "Eccle";
    foreach ($data as $town)
    if (strpos($town, $Find) !== false) {
        echo $town;
    }
    

    使用
    preg\u match
    功能的解决方案:

    $Towns = "Eccleston, Aberdeen, Glasgow";
    $Find = "Eccle";
    
    preg_match("/\b\w*?$Find\w*?\b/", $Towns, $match);
    $result = (!empty($match))? $match[0] : "";
    
    print_r($result);   // "Eccleston"
    

    假设你总是有$Towns被“,”隔开,那么你可以这样做

    $Towns = "Eccleston, Aberdeen, Glasgow";
    $Find = "Eccle";    
    $TownsArray = explode(", ", $Towns);
    
        foreach($TownsArray as $Town)
        {
           if(stristr($Find, $Town))
           { 
              echo $Town; break;
           }
        }
    

    上述代码将在找到针并退出foreach循环后输出Town。您可以删除“break;”继续让脚本运行以查看是否找到更多结果。

    我认为他希望输出Eccleston而不是整个字符串。@Swolschblauw不确定,但我添加了一个修改为该方向的版本。谢谢你提到这个观点…@Swolschblauw,谢谢,我一开始没有领会。@arkascha我一开始没有完全理解这个问题,解决办法是adapted@PaulH,你错了。检查您的测试代码是否有输入错误。。。阅读关于PCRE接缝对我来说过于复杂的变量插值,为什么不
    “/\w*$Find\w*/”
    你忘了ungreedy操作符和单词边界,你能解释一下
    \b
    \w*
    不是由单词边界自动分隔的吗?当然不是。但是,我们应该考虑,搜索的单词可以是在某个单词开始或在结尾处或在其他位置,语法是“代码> STRSTR($HASTEACK,$CUTE),因此,您可能指<代码> STRSTR($GULL,$find)< /COD>,而不是<代码> STRSTR($find,$Gub)< />代码> <代码>开机()/<代码>字符串将转换为数组,数组将按项搜索。
    preg_match()
    解决方案不会转换为数组,但搜索更复杂。
    $Towns = "Eccleston, Aberdeen, Glasgow";
    $Find = "Eccle";
    
    preg_match("/\b\w*?$Find\w*?\b/", $Towns, $match);
    $result = (!empty($match))? $match[0] : "";
    
    print_r($result);   // "Eccleston"
    
    $Towns = "Eccleston, Aberdeen, Glasgow";
    $Find = "Eccle";    
    $TownsArray = explode(", ", $Towns);
    
        foreach($TownsArray as $Town)
        {
           if(stristr($Find, $Town))
           { 
              echo $Town; break;
           }
        }