如何检查字符串特定位置数组元素并提取匹配缩写到新数组?
嘿,作为开发新手完全不用慌,这俩需求用PHP都能轻松搞定,我给你一步步拆解方案:
需求1:检查字符串特定位置是否存在一个或多个数组元素
首先得明确特定位置的定义——是指字符串的某个固定索引位置(比如从第5个字符开始),还是某个特定区域(比如字符串开头、结尾)?我这里给你两种常见场景的实现:
场景A:检查数组元素是否出现在字符串的指定起始位置
比如你想确认从字符串的第$startIndex位开始,是否正好匹配数组里的某一个元素:
function checkSpecificPositionHasElement(string $string, array $elements, int $startIndex): bool { // 先确保起始位置不超出字符串长度 if ($startIndex >= strlen($string)) { return false; } foreach ($elements as $element) { $elementLength = strlen($element); // 检查从起始位置开始的子串是否等于当前元素 if (substr($string, $startIndex, $elementLength) === $element) { return true; } } return false; } // 示例使用 $elements = ['HSGE', 'DFVC']; $string = 'This is a abbreviation HSGE and here is the other DFVC'; // 检查从第25位开始是否有匹配元素(HSGE正好在这个位置) var_dump(checkSpecificPositionHasElement($string, $elements, 25)); // 输出bool(true)
场景B:检查数组元素是否存在于字符串的某个特定区域(比如开头/结尾)
如果是检查元素是否在字符串开头:
function checkStartHasElement(string $string, array $elements): bool { foreach ($elements as $element) { if (str_starts_with($string, $element)) { return true; } } return false; }
检查结尾的话,把str_starts_with换成str_ends_with就行~
需求2:提取字符串中匹配的缩写到新数组
这个需求正好对应你给的示例,用正则表达式的preg_match_all就能完美解决,还能处理“一个、多个、零个匹配”的所有情况:
$abbreviation = array('HSGE', 'DFVC'); $string = 'This is a abbreviation HSGE and here is the other DFVC'; // 先转义缩写里的特殊字符,避免正则语法出错 $escapedAbbr = array_map('preg_quote', $abbreviation); // 构建正则模式:用\b确保匹配*完整单词*,避免误匹配(比如HSGE123这种包含缩写的长词) $pattern = '/\b(' . implode('|', $escapedAbbr) . ')\b/'; // 执行匹配,结果存到$matches数组里 preg_match_all($pattern, $string, $matches); // $matches[0]就是所有匹配到的缩写数组 $output = $matches[0]; print_r($output);
运行这段代码后,你会得到预期的输出:
Array ( [0] => HSGE [1] => DFVC )
如果字符串里没有任何匹配的缩写,$output会是一个空数组,完全符合你的需求~
内容的提问来源于stack exchange,提问作者Muchtar
相关产品推荐
相关产品推荐

