如何使用正则表达式从含字母数字的字符串中提取工单编号
提取工单编号的正则解决方案
针对你给出的三种字符串场景,我们可以完善正则表达式来精准捕获工单编号。这里的核心是兼容空格、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
相关产品推荐
相关产品推荐

