PHP Regex:匹配非转义字符组


PHP Regex: Matching Non-escaped Character Groups

好的,所以我一整天都在努力解决这个问题,在PHP中使用各种正则表达式。我有一个这样的字符串:

$str = "this is a(n) {item} made by {username}. Watch out for ''{escaped} items. This one is ''''{notescaped}.";

我需要捕捉被花括号包围的未转义组。我计划使用preg_split将组中的字符串(包括大括号)拆分为一个数组,以便以后可以用所需的信息填充空格。

因此,这样做的结果应该是:

// After preg_split
array (
    [0] => "this is a(n) ",
    [1] => " made by ",
    [2] => ". Watch out for {escaped} items. This one is ''",
    [3] => "."
);
// Captured delimiters from preg_split
array(
    [0] => "{item}",
    [1] => "{username}",
    [2] => "{notescaped}",
);

我知道如何使用基本的'{.*'}简单地捕获组,但我需要确保它没有被转义。所以像''''''{escaped}(3个反斜杠)这样的东西仍然可以对其进行转义。大括号内的字符可以是任何字符,没有特定的字符,也没有需要检查转义的字符。非常感谢在这方面的任何帮助!

使用后睫毛很痛苦,但这会在"无刺"牙套之间找到一切:

(?<=^|[^''])(?:['']{4})*[{]([^}]*)[}]

作为一根绳子,它变成了这个怪物:

$re = "~(?<=^|[^''''])(?:['''']{4})*[{]([^}]*)[}]~s";

从本质上讲,它确保在括号之前有偶数个反斜杠。