Php 用于在大括号之间提取文本的正则表达式
我试图在PHP中提取大括号之间的文本。e、 g 欢迎{$user.first_name}访问{$site}1.5版。您的用户名 是{$user.username}。您当前的声誉为{$user.声誉.name} 我使用了Php 用于在大括号之间提取文本的正则表达式,php,regex,Php,Regex,我试图在PHP中提取大括号之间的文本。e、 g 欢迎{$user.first_name}访问{$site}1.5版。您的用户名 是{$user.username}。您当前的声誉为{$user.声誉.name} 我使用了\{\$(.*?)\},在某些情况下效果很好。这符合: {$user.first_name} {$site} {$user.username} {$user.reputation.name} 但现在我只想匹配具有单个或多个字符的文本。(点)在支架内。i、 e对于上述字符串,我只
\{\$(.*?)\}
,在某些情况下效果很好。这符合:
- {$user.first_name}
- {$site}
- {$user.username}
- {$user.reputation.name}
- {$user.first_name}
- {$user.username}
- {$user.reputation.name}
\{\$([^.{}]+(?:\.[^.{}]+)+)\}
看
请注意,我使用的不是惰性点匹配*?
,而是与
、{
或}
以外的任何字符相匹配的否定字符类[^.{}]
。因此,我们匹配任何不包含
且仍在大括号内的块
正则表达式细分:
-文字\{\$
{$
-组1匹配([^.{}]+(?:\.[^.{}]+)+)
-1个或多个字符,而不是[^.{}]+
、
或{
}
-1个或多个(由于(?:\.[^.{}]+)+
)序列+
-文字点\。
-1个或多个字符,而不是[^.{}]+
、
或{
}
-文字\}
}
您可以使用以下模式:
~{\$([^}.]*+[^}]+)}~
[^}.]*+
有所有格量词,不能返回字符,所以[^}]+
只能匹配一个点作为第一个字符。太好了!工作起来很有魅力。非常感谢您的快速回复和完美回答。:-)谢谢。将~替换为\后,此表达式也适用于我。我用\{$([^}.]*+[^}]+)\}来测试你的表达式。@AmitKumar:你不需要做这个替换。您也不需要避开花括号。\{$([^}.]*+[^}]+\}有效,但{$([^}.]*+[^}]+}~在我的PHP测试代码中不起作用。@AmitKumar:~
是模式分隔符(以及//code>)是有效的。对不起,是我的错。我把表达式放在/(斜杠)之间,这在本例中是不需要的。再次感谢您的时间和帮助。向上投票
~{\$([^}.]*+[^}]+)}~