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

如何使用正则表达式从含字母数字的字符串中提取工单编号

提取工单编号的正则解决方案

针对你给出的三种字符串场景,我们可以完善正则表达式来精准捕获工单编号。这里的核心是兼容空格、HTML标签这些干扰项,同时准确锁定数字编号部分。

完整代码片段

$strings = [
    '订单2555225552 工单编号 [TICKET 201805000000012345]',
    '订单32234234234 工单编号 [TICKET <span>201805000000012345</span>]',
    '订单5656567655665565 工单编号 [ TICKET <span> 201805000000012345</span> ]'
];

foreach ($strings as $str) {
    $matches = array();
    // 完善后的正则表达式
    preg_match('/\[\\s*TICKET\\s*(?:<span>\\s*)?(\d+)(?:\\s*<\/span>)?\\s*\]/i', $str, $matches);
    if (!empty($matches[1])) {
        echo "提取到的工单编号:" . $matches[1] . "\n";
    }
}

正则表达式解释

让我们拆解一下这个正则的各个部分,方便你理解和调整:

  • \[:匹配左方括号[,因为括号是正则特殊字符,所以用反斜杠转义
  • \\s*:匹配任意数量的空格(包括0个),兼容字符串里的空格干扰
  • TICKET:匹配固定标识,后面的/i修饰符表示不区分大小写(如果你的场景里大小写固定,可以去掉)
  • (?:<span>\\s*)?:(?:...)是非捕获组,?表示这部分是可选的。用来匹配可能存在的<span>标签及标签内的空格
  • (\d+):捕获组,用来提取连续的数字(也就是我们要的工单编号),\d+匹配1个或多个数字,如果你的工单编号长度固定,可以改成\d{17}来更精准匹配
  • (?:\\s*<\/span>)?:同样是可选的非捕获组,匹配可能存在的闭合</span>标签及标签前后的空格
  • \\s*\]:匹配右方括号]及前面的任意空格

测试结果

运行上面的代码,三个字符串都会输出:

提取到的工单编号:201805000000012345

这样就完美兼容了你给出的三种场景,哪怕后续出现类似的空格或标签变化,只要核心结构不变,这个正则都能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:38