gpt4 book ai didi

php - 忽略 preg_match_all 输出中的字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:59:06 29 4
gpt4 key购买 nike

我有这个正则表达式:

preg_match_all('/{.*?}/', $html, $matches);

它返回写在大括号内的所有字符串。 $matches 变量也包含 { 和 } 字符。我怎样才能删除它们?

我不想做:

if ($matches[0] == "{variable}")

而且我不想在正则表达式中添加 ( 和 ) 字符,因为我不想使用:

preg_match_all('/{(.*?)}/', $html, $matches);
if ($matches[0][0] == "variable")

那么有没有一种更简单的方法可以从正则表达式中的 $matches 中删除花括号?

最佳答案

在 PCRE(PHP 的正则表达式实现)中,您可以使用环视来执行零长度断言。回顾一下,(?<=...) , 将确保表达式出现在内部指针后面。展望 future ,(?=...) , 将确保表达式出现在内部指针之前。如果需要,这些都可以被否定:(?<!...)(?!...) .


这给我们带来了这个表达式:

(?<={).*?(?=})

Demo


以同样的方式实现它:

preg_match_all('/(?<={).*?(?=})/', $html, $matches);
// $matches[0] = 'variable';

@CasimirEtHippolyte 提出了一个很好的观点。这是一个很好的例子,说明惰性点匹配全部是不必要的,并且可能会降低回溯的性能。您可以替换 .*?[^}]*匹配 0+ 个非 }字符。

关于php - 忽略 preg_match_all 输出中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25977948/

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