技术需求:在数组各索引中查找指定字符串的后续单词
从数组元素中提取指定字符串的后续单词
嘿,我来帮你搞定这个需求——遍历数组里的每个元素,找出指定字符串后面跟着的单词/内容对吧?先把你的需求和待处理数组理清楚:
需求明确
我们需要处理给定的数组,针对每个元素里的指定目标字符串,提取出它后面的相关内容(可能是单个单词,也可能是一段文本)。
待处理的数组(PHP格式)
$inputArray = [ '咨询*S R航空票务及货币兑换(金奈T Nagar区)* 用户Muruganandam在Justdial平台咨询了您的相关业务类别,反馈详情 ___1nam Muruganandam先生 来电需求:国内航空票务代理 来电日期及时间:2018年4月26日周四 13:54:31 ___ph +919080842161 ___1em nmsmurugan2000@gmail.com', '咨询*S R航空票务及货币兑换(金奈T Nagar区)* 用户Muruganandam咨询了您的相关业务类别……' ];
两种实用解决方案
根据你的实际需求(比如是提取单个单词还是整段内容,目标字符串是固定还是有规律),我给你准备了两种方法:
方法1:字符串定位截取(适合固定目标字符串的场景)
如果你的目标字符串是固定的(比如___1nam、来电需求:这类),用strpos找到位置再截取就很直接:
// 先定义要查找的所有目标字符串 $targets = ['___1nam', '来电需求:', '___ph', '___1em']; foreach ($inputArray as $idx => $item) { echo "处理第{$idx}个元素:\n"; foreach ($targets as $target) { // 找到目标字符串在当前元素中的位置 $pos = strpos($item, $target); if ($pos !== false) { // 从目标字符串结束的位置开始截取 $afterContent = substr($item, $pos + strlen($target)); // 如果你只需要第一个单词,用空格分割取第一个元素就行 $firstWord = explode(' ', trim($afterContent))[0]; echo "- 「{$target}」后面的第一个单词:{$firstWord}\n"; // 要是需要后面全部内容,直接输出去空格后的结果 echo "- 「{$target}」后面的全部内容:" . trim($afterContent) . "\n"; } else { echo "- 元素里没找到「{$target}」这个目标哦\n"; } } echo "-------------------------\n"; }
方法2:正则表达式(适合复杂格式或有规律的目标字符串)
如果你的目标字符串是有规律的(比如都是___开头的标记),用正则表达式匹配会更灵活,能一次性提取所有符合规则的内容:
foreach ($inputArray as $idx => $item) { echo "处理第{$idx}个元素:\n"; // 匹配所有___xxx格式的标记,捕获后面的内容直到下一个标记或字符串结束 preg_match_all('/___(\w+)\s+(.+?)(?=\s+___|$)/', $item, $matches); if (!empty($matches[1])) { foreach ($matches[1] as $key => $tag) { echo "- 标记「___{$tag}」的后续内容:{$matches[2][$key]}\n"; } } // 单独提取「来电需求:」后面的内容 preg_match('/来电需求:(.+?)(?=\s+来电日期|$)/', $item, $demandMatch); if (!empty($demandMatch[1])) { echo "- 来电需求内容:{$demandMatch[1]}\n"; } echo "-------------------------\n"; }
运行效果示例
拿第一个数组元素来说,运行代码后会输出:
处理第0个元素: - 「___1nam」后面的第一个单词:Muruganandam先生 - 「___1nam」后面的全部内容:Muruganandam先生 来电需求:国内航空票务代理 来电日期及时间:2018年4月26日周四 13:54:31 ___ph +919080842161 ___1em nmsmurugan2000@gmail.com - 「来电需求:」后面的第一个单词:国内航空票务代理 - 「来电需求:」后面的全部内容:国内航空票务代理 来电日期及时间:2018年4月26日周四 13:54:31 ___ph +919080842161 ___1em nmsmurugan2000@gmail.com - 「___ph」后面的第一个单词:+919080842161 - 「___ph」后面的全部内容:+919080842161 ___1em nmsmurugan2000@gmail.com - 「___1em」后面的第一个单词:nmsmurugan2000@gmail.com - 「___1em」后面的全部内容:nmsmurugan2000@gmail.com -------------------------
内容的提问来源于stack exchange,提问作者satish kilari
相关产品推荐
相关产品推荐

