Php 要匹配所有标记的正则表达式模式
我试图编写正则表达式模式来解析具有类似标记(3个字符)的字符串,这些标记在字符串中失效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 更新:请参见我在
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
修饰符使*
不贪婪。它匹配尽可能短的字符串,该字符串为空。