首页 > 解决方案 > 匹配匹配字符串的最后一个“:”的子字符串

问题描述

我想从与此模式匹配的字符串中获取子字符串:

:((?![{\[\-\d])([^,}]+))

match all string value.

例如:

altitude{altitudeValue:52420,altitudeConfidence:alt-002-00}}},
highFrequencyContainer:basicVehicleContainerHighFrequency:
{heading{headingValue:3601,headingConfidence:127},speed{speedValue:0,speedConfidence:127},
driveDirection:unavailable

我与此字符串上方的模式匹配:

:alt-002-00
:basicVehicleContainerHighFrequency:{heading{headingValue:3601
:unavailable

但我想要:

:alt-002-00
NO: **:3601**  <--match from last ":" to end of previous match (is possible with regex?) only if is a 
string.
YES: if was **:hello** <-match because is a string
:unavailable

我想从最后一个“:”匹配到上一个匹配的结尾(可以使用正则表达式吗?)。如何改变我的模式规则?:((?![{\[\-\d])([^,}]+))

感谢和问候

标签: regexsubstring

解决方案


从最后一个匹配:可以通过添加:到否定字符类来完成。要获得子匹配,您可以使用单个捕获组而不是 2 个。

:((?![{\[\d-])[^:,}]+)

解释

  • :从字面上匹配
  • (捕获组 1
    • (?![{\[\d-])负前瞻,断言直接在右边的不是{ [数字或-
    • [^:,}]+匹配 1+ 次以外的任何字符: , }
  • )关闭组 1

正则表达式演示


推荐阅读