正则表达式高级捕获

Regex Advanced 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 未捕获。

更新 - 起床到最后_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)
 )