【问题标题】:match closest value pair匹配最接近的值对
【发布时间】:2017-02-13 19:25:21
【问题描述】:

如何找到与另一个字符串最接近的匹配字符串

例如

string1:val1 ... string1:val2 .... string2:val3 ...

应该捕获最接近 string2 的 string1,即 "string1:val2"

  • string1 可以出现任意次数。

  • 字符之间可以是任何字符

【问题讨论】:

  • @WiktorStribiżew 前面的第一个字符串可能是无限的
  • @WiktorStribiżew last "title":" " 最接近 "value":" "
  • 是您要查找的内部标题/值吗?
  • this answer。 sln 所暗示的是一个缓和的贪婪令牌。

标签: php regex


【解决方案1】:

最简单的方法是(?s)"title":(?:(?!"title":).)*?"value":".*?"

 (?s)                    # Dot-all modifier
 "title":                # Literal 'title'
 (?:                     # Group start
      (?! "title": )          # Negative assertion, not 'title' ahead
      .                       # Ok, grab this chakracter
 )*?                     # Group end, do 0 to many times
 "value":" .*? "         # Until 'value' is found

输出

  **  Grp 0 -  ( pos 73 , len 39 ) 
 "title":"text2" asjdsjsd "value":"val1"  

【讨论】:

  • (?s) 是干什么用的?你能解释一下这是做什么的吗?谢谢
  • 这是一个称为内联修饰符的正则表达式结构。 s 表示 Dot-all = (. ) 匹配任何字符,包括换行符。
  • 什么是 (?! 如果您能解释一下这些步骤会很有帮助
  • 添加了 cmets。
猜你喜欢
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 2011-03-01
  • 2015-03-18
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多