gpt4 book ai didi

php - 如果不包含 "{"和 "}",则抓取 {...} 内的所有字符

转载 作者:行者123 更新时间:2023-12-04 15:52:23 25 4
gpt4 key购买 nike

我想捕获 { ... } 中的所有字符,

如果里面没有找到“{”和“}

例如:

{amdnia91(\+wowa}

捕获它。

{amdn{ia91(\+wowa}

未捕获(包含“{”)。

preg_match_all('#(.+?)\{(.+?)\}#', $input, $output);

如何解决?

编辑。详细解释:

我会尝试创建 css minifier。但我需要捕获括号内的所有名称和内容作为单独的数组值。

当前$输入如下所示:

.something{property:value;prop2:value}#something2{someprop:val;prop:val}

它也经过压缩,因此包含多个 ...{}...{} 内联。我的代码一切都很好,但是......如果在括号内包含它的括号,也会捕获此捕获,但如果里面包含括号,我不想捕获它。

最佳答案

[^}{]表示匹配任何不是 } 或 { 的字符。

所以:

preg_match_all('#\{([^}{]+)\}#', $input, $output);

但是,请注意,在您的 {amdn{ia91(+wowa} 中例如,此匹配 ia91(+wowa片段。

编辑

如果您根本不希望第二个示例有任何匹配,请尝试以下操作:

preg_match_all('#^[^}{]*\{([^}{]+)\}[^}{]*$#', $input, $output);

正则表达式分解意味着:

  • ^ - 行的开头
  • [^}{]* - 任何不是 { 或 } 零次或多次的字符
  • \{ - 字面量 { 字符
  • ([^}{]+) - 捕获一个或多个非 { 或 }
  • 的字符
  • \} - 文字 } 字符
  • [^}{]* - 任何不是 { 或 } 零次或多次的字符
  • $ - 行尾

Demonstration

第二次编辑

鉴于您对所需内容的进一步解释,我建议:

preg_match_all('#(?<=^|})[^}{]*?\{([^}{]+?)\}(?=[^}]*$|[^}]*\{)#', $input, $output);

这使用了“后视”和“前视”。分割下来,它的意思是:

  • (?<=^|}) Lookbehind:断言这是行的开头或者前一个字符是文字​​“}”但不要将该字符包含在整个匹配中
  • [^}{]*? - 延迟匹配零个或多个非 { 或 }
  • 的字符
  • \{ - 字面意思{
  • ([^}{]+?) - 懒惰地捕获一个或多个非 { 或 }
  • 的字符
  • \} - 文字 }
  • (?=[^}]*$|[^}]*\{) - Lookahead:确保以下字符是零个或多个不 } 后跟行尾的字符,或者零个或多个不 } 后跟文字 { 的字符,但不包括这些字符作为整场比赛

Demonstration

关于php - 如果不包含 "{"和 "}",则抓取 {...} 内的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36691046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com