You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中如何搜索提取子串及拆分含地址姓名的字符串入库?

嘿,这两个PHP字符串处理的问题我太熟了,给你一步步讲清楚!

1. 如何在PHP中从字符串里搜索并提取指定子串?

提取子串的方法有好几种,得根据你的具体需求来选:

  • 方法一:用strpos() + substr()组合
    这是最基础的组合,先找到子串的位置,再截取。适合你知道要提取的子串内容,或者要截取某个位置前后内容的情况。

    $originalStr = "今天的天气真不错,适合出门散步";
    $target = "天气";
    // 先找子串的起始位置
    $pos = strpos($originalStr, $target);
    // 一定要用!==false判断,因为strpos可能返回0(子串在开头)
    if ($pos !== false) {
        // 从$pos位置开始,截取长度为strlen($target)的内容
        $extracted = substr($originalStr, $pos, strlen($target));
        echo $extracted; // 输出 "天气"
    }
    
  • 方法二:用preg_match()正则匹配
    如果要提取的内容有固定模式(比如邮箱、手机号、URL),正则绝对是最优解。

    $str = "我的手机号是13812345678,记得联系我";
    // 匹配11位手机号的正则
    if (preg_match('/1[3-9]\d{9}/', $str, $matches)) {
        echo $matches[0]; // 输出 "13812345678"
    }
    

    正则的好处是能处理复杂的格式,哪怕子串周围的内容有变化也能精准提取。

  • 方法三:用strstr()直接截取
    如果你想提取从某个子串开始到字符串结尾的内容,或者子串之前的内容,strstr()很方便:

    $str = "咖啡, 奶茶, 果汁, 可乐";
    // 提取从"奶茶"开始到结尾的内容
    $result1 = strstr($str, "奶茶");
    echo $result1; // 输出 ", 奶茶, 果汁, 可乐"
    
    // 第三个参数传true,提取"奶茶"之前的内容
    $result2 = strstr($str, "奶茶", true);
    echo $result2; // 输出 "咖啡"
    
2. 从混合信息字符串中提取地址和姓名

针对你给的示例字符串$string = 'Address : 123 Street Name : John';,推荐两种靠谱的方法:

  • 方法一:正则捕获组(最灵活)
    用正则匹配Address : 和Name :之间的内容,以及Name : 之后的内容,用捕获组直接拿到对应的值:

    $string = 'Address : 123 Street Name : John';
    // 正则里的(.*?)是非贪婪匹配,避免把Name的内容也包含进去
    if (preg_match('/Address : (.*?) Name : (.*)/', $string, $matches)) {
        $address = trim($matches[1]); // 去掉前后可能的空格
        $name = trim($matches[2]);
        echo "地址:{$address}\n姓名:{$name}";
        // 输出:
        // 地址:123 Street
        // 姓名:John
    }
    

    这种方法哪怕字符串里的空格有细微变化(比如多了几个空格),正则也能匹配到,容错性强。

  • 方法二:字符串分割(适合格式完全固定的情况)
    如果你的字符串格式永远是Address : [地址] Name : [姓名],用explode()分割也很简单:

    $string = 'Address : 123 Street Name : John';
    // 先按"Name : "分割,得到地址部分和姓名
    $splitByName = explode('Name : ', $string);
    $name = trim($splitByName[1]);
    
    // 再把地址部分按"Address : "分割,拿到地址
    $splitByAddress = explode('Address : ', $splitByName[0]);
    $address = trim($splitByAddress[1]);
    
    echo "地址:{$address}\n姓名:{$name}";
    

    这个方法代码直观,但如果字符串格式变了(比如顺序调换、关键词拼写变化)就会失效,所以适合格式绝对固定的场景。

内容的提问来源于stack exchange,提问作者Siyan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:19:27