我有一个字符串,需要在每个 12 位数字后面添加换行符
<br>
。
示例字符串:
1 NM 2951-2 S Sodium: LN 144 mmol/L mmol/L 135-145 F 201402150533 2 NM 2823-3 S Potassium: LN 5.6 mmol/L mmol/L 3.5-5.5 H F 201402150533 3 NM 2075-0 S Chloride: LN 103 mmol/L mmol/L 95-110 F 201402150533
由于 12 位字符串是日期和时间戳,因此每次测试都会改变。
这是使用正则表达式的好时机(请参阅preg_replace):
$str = preg_replace('/\d{12}/', '$0<br>', $str);
将每个 12 个数字的字符串替换为同一字符串,后跟
<br>
。
为了防止在长度超过 12 位的数字中间注入
<br>
字符串的边缘情况,请使用字边界 (\b
)。
对字符串末尾元字符使用否定前瞻,以防止在字符串末尾添加不必要的 br 标记。
通过使用
\K
,您不需要在替换字符串中引用完整的字符串匹配。
您应该消除 12 位数字 (
\s*
) 之后的所有空格,以便完美修剪输出字符串。
代码:(演示)
$str = '1 NM 2951-2 S Sodium: LN 144 mmol/L mmol/L 135-145 F 201402150533 2 NM 2823-3 S Potassium: LN 5.6 mmol/L mmol/L 3.5-5.5 H F 201402150533 3 NM 2075-0 S Chloride: LN 103 mmol/L mmol/L 95-110 F 201402150533';
echo preg_replace('/\b\d{12}\b(?!$)\K\s*/', '<br>', $str);
原始输出:
1 NM 2951-2 S Sodium: LN 144 mmol/L mmol/L 135-145 F 201402150533<br>2 NM 2823-3 S Potassium: LN 5.6 mmol/L mmol/L 3.5-5.5 H F 201402150533<br>3 NM 2075-0 S Chloride: LN 103 mmol/L mmol/L 95-110 F 201402150533
HTML 渲染输出:
1 NM 2951-2 S Sodium: LN 144 mmol/L mmol/L 135-145 F 201402150533
2 NM 2823-3 S Potassium: LN 5.6 mmol/L mmol/L 3.5-5.5 H F 201402150533
3 NM 2075-0 S Chloride: LN 103 mmol/L mmol/L 95-110 F 201402150533
如果要求是任意长度的数字,则模式可以简化为:
/\d+(?!$)\K\s*/