Php 从字符串中删除花括号

Php 从字符串中删除花括号,php,regex,Php,Regex,我在网上找到了很多例子,但仍然找不到解决这个问题的方法。 我得到了一个PHP页面,它需要解析HTML+JS页面,并且需要删除{}和括号之间包含的所有内容。 关键是括号中的内容必须是[A-Za-z0-9_2;],而不是其他内容(就像我到目前为止所做的那样) 这是我目前的替代品: $this->content = preg_replace("/\{((?:[^{}]++|\{(?1)\})++)\}/", "", $this->content); 到目前为止,这一切都很好,关键是它不会

我在网上找到了很多例子,但仍然找不到解决这个问题的方法。 我得到了一个PHP页面,它需要解析HTML+JS页面,并且需要删除{}和括号之间包含的所有内容。 关键是括号中的内容必须是[A-Za-z0-9_2;],而不是其他内容(就像我到目前为止所做的那样)

这是我目前的替代品:

$this->content = preg_replace("/\{((?:[^{}]++|\{(?1)\})++)\}/", "", $this->content);
到目前为止,这一切都很好,关键是它不会在括号中搜索正确的内容,并且不管括号中有什么内容都会删除它们(atm是从正在解析的页面内容中删除JS函数)

我需要修改什么才能将这种字符限制添加到reg-ex的内容中


谢谢

匹配这些大括号子字符串的模式非常简单:

\{[a-zA-Z0-9_]+\}

它转义
{
}
,否则可能被视为量词的一部分(例如
{3}
)。请注意,根据编程语言的不同,您可能需要对大括号(
\{[a-zA-Z0-9\]+\}
)进行双重转义,以便转义反斜杠本身。

尝试使用此模式:

\{[a-zA-Z0-9_]+?\}

最好在重复数的末尾使用带符号的延迟量化。

A-Za-z0-9
可以在正则表达式中表示为
\w

因此,如果括号中至少需要包含一个字符,则正则表达式将是

\{\w+\}
如果您认为可以为空,例如
{}
,则可以使用

\{\w*\}
如果你想让空间,那么它将是

\{[\w\s]+\}

你能解释一下你现在的版本到底是做什么的/它是如何工作的吗?谢谢大家。这解决了问题:$This->content=preg\u replace(“/\{[a-zA-Z0-9\+?\}/”,“”,$This->content);我已经试过:$this->content=preg\u replace(\{[a-zA-Z0-9\]+\},“”,$this->content);它删除了页面的所有内容,但HTML注释几乎没有。使最里面的表达式不贪婪,否则它将删除第一个
{
和最后一个
}
@JohannesH之间的任何内容。不,不会的。我没有使用
*
,而且
[a-zA-Z0-9.
不会消耗
}
.Erm。。。是的,显然你是对的。对不起,是我的错。@JohannesH。人们经常犯的错误是这样使用
*
\{.*}
,在这种情况下,你完全正确。那个表达式消耗了太多字符,因为点(
)几乎与任何东西都匹配。@JohannesH。谢谢,我知道贪婪。但是,character类永远不会匹配右括号
}
$this->content=preg\u replace(\{[a-zA-Z0-9\]+?\},“”,$this->content)@MariusSchulz是的,请参见对您答案的评论。在这件事上很快;)维克多:正如上面的评论所讨论的,这里不需要懒惰的量词。@DarioEmerson没有理由这么做。。。介意在某个粘贴箱中提供您正在使用的实际字符串吗?