本文介绍一种高效、可扩展的 php 正则方案:利用正向先行断言(positive lookahead)精准分离起始符号(如 `(`、`{`、`[`)与后续连续字母文本,避免捕获冗余匹配内容,同时支持多类型分隔符扩展。
在处理结构化字符串(如 (original、{config}、[debug])时,常需将起始分隔符(如圆括号、花括号、方括号)与其后紧邻的标识符文本分别提取。若直接使用 preg_match(‘/(\()(\w+)/’, $str, $matches),虽然能匹配成功,但 $matches[0] 会包含完整子串 “(original”,导致结果数组长度为 3(含全匹配项),不符合“仅返回分隔符 + 文本”的精简需求。
正确解法是:让正则引擎匹配分隔符本身,但将后续文本通过 (?=…) 断言“预读”而不消耗位置,再用捕获组提取该文本。这样 $matches[0] 就是纯分隔符,$matches[1] 是目标文本。
例如,针对 (original:
$input = "(original";
preg_match('/\((?=(\w+))/', $input, $matches);
print_r($matches);
// 输出:
// Array
// (
// [0] => (
// [1] => original
// )
✅ 关键点解析: