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;
}
}