Php 带有等号的大括号的正则表达式匹配

Php 带有等号的大括号的正则表达式匹配,php,regex,preg-match,curly-braces,Php,Regex,Preg Match,Curly Braces,我需要一个正则表达式来匹配以下内容: {RandomName Option="value"} {AnotherRandomString AnotherOption="Another value" Option1="Woot woot"} 基本上,任何以{和随机字符串开头,然后是空格,然后是名称-值列表,对值进行排序,对值进行and=符号和引号。到目前为止,我能得到的最远结果如下,但不是很接近我认为: preg_match_all( '#\{(.*?)\=(.*?)\}#ims'

我需要一个正则表达式来匹配以下内容:

{RandomName Option="value"}
{AnotherRandomString AnotherOption="Another value" Option1="Woot woot"}
基本上,任何以{和随机字符串开头,然后是空格,然后是名称-值列表,对值进行排序,对值进行and=符号和引号。到目前为止,我能得到的最远结果如下,但不是很接近我认为:

preg_match_all(
        '#\{(.*?)\=(.*?)\}#ims',
        $this->search_string,
        $the_matches
    );

这里有一个更好的正则表达式更具体地匹配您的情况:

#\{[^{}]+\=[^{}]+\}#ims
这假定内部永远不会有闭合大括号
}


编辑也为
{
添加一个异常。

这里有一个更好的正则表达式,更具体地匹配您的情况:

#\{[^{}]+\=[^{}]+\}#ims
这假定内部永远不会有闭合大括号
}


编辑也为
{
添加一个例外情况。

如何?它为起始标签创建一个编号组,为所有名称/值对创建一个编号组,然后为每个单独的名称/值对创建一个编号组

{(\w+)\s+((\w+=".*?"\s*)+)}

这样如何?它为起始标签创建一个编号组,为所有名称/值对创建一个编号组,然后为每个单独的名称/值对创建一个编号组

{(\w+)\s+((\w+=".*?"\s*)+)}

是一个非常好的资源。它甚至有一个方便的“备忘单”你可以输入字符串来测试你的正则表达式。在你尝试对别人的正则表达式太过喜欢之前,试着在上面玩一会儿。问题是,你的正则表达式与你期望的一致。你想让它更具体吗?更具体会更好,因为在转储数组之后,它似乎有一堆f中的空数组,并获得类似“{sting}的内容,这是一个非常好的资源。它甚至有一个方便的“备忘单”"你可以输入字符串来测试你的正则表达式。在你尝试对别人的正则表达式太过喜欢之前,试着在上面玩一会儿。问题是,你的正则表达式与你期望的一致。你想让它更具体吗?更具体会更好,因为在转储数组之后,它似乎有一堆如果一个{或}出现在开头和结尾以外的任何地方,它就不匹配了吗?这就是这个正则表达式所做的。
[^]
意味着里面没有任何字符。在我的测试中,它是匹配的:{module:list id=“{listId}…在}之前的第二个{应该导致它不匹配,不是吗?哦,我明白,解决方案(在我现在的编辑中)是
[^{}]
,意思是不
{
和不
}
匹配,但不分解值,只找到整个字符串。有没有办法使它这样,如果一个{或一个}出现在开头和结尾以外的任何地方,它都不匹配?这就是这个正则表达式所做的。
[^]
意味着里面没有任何字符。在我的测试中,它是匹配的:{module:list id=“{listId}…在}之前的第二个{应该导致它不匹配,不?哦。我理解,解决方案(在我现在的编辑中)是
[^}]
,意思是不
{
和不
}
匹配但不分解值,只会找到整个字符串,这是好的,但它也会获取我正在查看的字符串中的各种HTML元素。这很好,但它也会获取我正在查看的字符串中的各种HTML元素。