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

PHP函数/工具需求:检测字符串含数字及样本匹配位置与来源

嘿,我来帮你搞定这两个PHP需求,直接上实用的代码和说明:

1. 检测字符串中是否包含数字

这个需求很简单,用正则表达式就能快速实现,我写了个简洁的函数:

function hasNumber(string $str): bool {
    // 正则匹配任意单个数字,找到就返回true
    return preg_match('/\d/', $str) === 1;
}

// 测试一下
var_dump(hasNumber("Hello 123 World")); // 输出 bool(true)
var_dump(hasNumber("纯文字内容")); // 输出 bool(false)

原理很直白:/\d/ 是正则里匹配任意单个数字的元字符,preg_match 如果找到匹配就返回1,否则返回0,这样就能轻松判断字符串里有没有数字了。

2. 检测长字符串是否包含样本数组元素并返回匹配信息

针对你给出的示例,我写了一个支持通配符的函数(默认用#作为通配符,匹配一个或多个数字),能返回匹配到的样本、文本内容和起始位置:

function findSampleMatch(string $longStr, array $samples, string $wildcard = '#', string $wildcardPattern = '\d+'): array {
    $matchResults = [];
    
    foreach ($samples as $sample) {
        // 先转义样本里的正则特殊字符,避免干扰匹配
        $escapedSample = preg_quote($sample, '/');
        // 把通配符替换成指定的正则模式(默认匹配数字)
        $regexPattern = str_replace(preg_quote($wildcard, '/'), $wildcardPattern, $escapedSample);
        $regexPattern = "/$regexPattern/";
        
        // 执行匹配,同时获取匹配文本的起始位置
        if (preg_match($regexPattern, $longStr, $matches, PREG_OFFSET_CAPTURE)) {
            $matchResults[] = [
                'origin_sample' => $sample,
                'matched_text' => $matches[0][0],
                'start_position' => $matches[0][1]
            ];
        }
    }
    
    return $matchResults;
}

// 用你的示例测试
$longString = "Lorem ipsum dolor 123 SAMPLE sit amet, consectetur.";
$sampleArray = ["# SAMPLE", "SAMPLE #"];

$results = findSampleMatch($longString, $sampleArray);
print_r($results);

运行这个代码后,你会得到这样的输出:

Array
(
    [0] => Array
        (
            [origin_sample] => # SAMPLE
            [matched_text] => 123 SAMPLE
            [start_position] => 19
        )
)

完全符合你要的效果!如果需要让通配符#匹配其他内容(比如任意非空白字符),只需要调用函数时传入自定义的$wildcardPattern参数就行,比如:

// 让#匹配任意非空白字符
$results = findSampleMatch($longString, $sampleArray, '#', '\S+');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:11:24