Php 要匹配所有标记的正则表达式模式

Php 要匹配所有标记的正则表达式模式,php,regex,Php,Regex,我试图编写正则表达式模式来解析具有类似标记(3个字符)的字符串,这些标记在字符串中失效 ABC=TEXT 1 - HERE.. DEF=/TEXT 2: TEXT .. ZYX=TEXT 3 TEXT 当我使用 #([A-Z]{3})=(.*)+#isU 我只得到标签ABC,DEF。。。但是没有得到满足。我怎样才能两者兼得 我想得到的结果与对标签和内容 ABC TEXT 1 - HERE.. DEF /TEXT 2: TEXT .. ZYX TEXT 3 TEXT 更新:请参见我在

我试图编写正则表达式模式来解析具有类似标记(3个字符)的字符串,这些标记在字符串中失效

ABC=TEXT 1 - HERE.. DEF=/TEXT 2: TEXT .. ZYX=TEXT 3 TEXT
当我使用

#([A-Z]{3})=(.*)+#isU
我只得到标签ABC,DEF。。。但是没有得到满足。我怎样才能两者兼得

我想得到的结果与对标签和内容

ABC
TEXT 1 - HERE.. 

DEF
/TEXT 2: TEXT .. 

ZYX
TEXT 3 TEXT

更新:请参见我在

上的示例,您需要使用正向前瞻断言

([A-Z]{3})=(.*?)(?=[A-Z]{3}=|$)
这个
([A-Z]{3})=(.*)+
正则表达式,特别是
这个子表达式

(.*)+   
告诉引擎尽可能多次覆盖捕获组1。
上次写入时,
*
未匹配任何内容,因为它无法匹配任何内容

因此,捕获组是空的

您可以使用它来获取捕获组2中的数据

 # (\b[A-Z]{3})=((?:(?!\b[A-Z]{3}=).)*)

 ( \b [A-Z]{3} )               # (1)
 =
 (                             # (2 start)
      (?:
           (?! \b [A-Z]{3} = )
           . 
      )*
 )                             # (2 end)

什么编程语言/正则表达式引擎?无论如何,剩下的是第二个匹配组——我使用的是PHP语言
ABC
将在
$match[1]
中,这里的
文本1
将在
$match[2]
中。在
(.*)
之后不需要
+
U
修饰符使
*
不贪婪。它匹配尽可能短的字符串,该字符串为空。