【问题标题】:Regex pattern to match all tags匹配所有标签的正则表达式模式
【发布时间】:2015-03-08 09:57:30
【问题描述】:

我正在尝试编写正则表达式模式来解析具有相似标签(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查看我的示例

【问题讨论】:

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

标签: php regex


【解决方案1】:

您需要使用积极的前瞻断言。

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

DEMO

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多