从字符串中删除大括号

时间:2014-02-14 09:33:09

标签: php regex

我在互联网上找到了很多例子,但仍然无法找到解决方案。 我有一个需要解析HTML + JS页面的PHP页面,需要删除{}和括号本身之间的所有内容。 关键是括号的内容必须是[A-Za-z0-9_]而不是其他任何内容(就像我到目前为止所做的那样)。

这是我目前的替代品:

$this->content = preg_replace("/\{((?:[^{}]++|\{(?1)\})++)\}/", "", $this->content);

到目前为止,这个工作非常好,重点是不会在括号内搜索正确的内容并删除它们,无论内部是什么(atm它正在从正在解析的页面内容中删除JS函数)。

我要修改什么才能将这种字符限制添加到注册表的内容中?

由于

3 个答案:

答案 0 :(得分:3)

尝试使用此模式:

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

最好在重复次数结束时使用?符号进行延迟量化。

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

因此,如果你的括号内部至少需要包含一个字符,那么正则表达式将是

\{\w+\}

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

\{\w*\}

如果你想允许空间,那么它将是

\{[\w\s]+\}