正则表达式高级捕获

时间:2017-07-17 20:31:13

标签: regex capture

我正在尝试从字符串中检索武器类名。

字符串可能如下所示:

econ/default_generated/weapon_m4a1_silencer_am_m4a1-s_alloy_orange_medium

我想要:

weapon_m4a1_silencer

但这里的诀窍是,有时类名可能有2个或3个实例" _"

所以第二个例子是:

econ/default_generated/weapon_deagle_am_scales_bravo_medium

并且会给我:

weapon_deagle

可以使用的模式是它们总是2个字母,它们位于_类的名字后面(在这种情况下" am ")

非常感谢任何帮助。

编辑似乎存在比我想象的更多_实例的情况。 示例:未捕获https://regex101.com/r/Cmup26/1 weapon_knife_m9_bayonet。

1 个答案:

答案 0 :(得分:1)

已更新 - 直到最后_AA _

weapon(?:(?:_[^\W_]+)+(?=_[^\W_]{2}_)|(?:(?!_[^\W_]{2}_)_[^\W_]+)+)

https://regex101.com/r/r6yORE/1

其中[^\W_][a-zA-Z0-9](替换允许的字母)

扩展

 weapon
 (?:                           # Cluster - requires a  _Segment
      (?: _ [^\W_]+ )+
      (?= _ [^\W_]{2} _ )           # Stop before last _AA_ (high priority)
   |                              # or,
      (?:                           # Stop before first _AA_ (low priority)
           (?! _ [^\W_]{2} _ )      #  (note- this is only place where 
           _  [^\W_]+               #   segments with NO trailing _AA_ 
      )+                            #   will match)
 )