正则表达式模式匹配所有标签

时间:2015-01-10 00:21:41

标签: 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

更新:请参阅https://regex101.com/r/uI0fW4/1

上的示例

2 个答案:

答案 0 :(得分:2)

你需要使用积极的先行断言。

([A-Z]{3})=(.*?)(?=[A-Z]{3}=|$)

DEMO

答案 1 :(得分:1)

([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)