我想要正则表达式匹配字符串有一个前缀和两个可选的后缀,可以以任何顺序,其中前缀和每个后缀单独分组,例如,匹配的前缀和多个可选的后缀没有分隔符
input => groups
!attackH5E4 => (attack, H5, E4)
!attackE4H5 => (attack, H5, E4)
!HHHHHHH5 => (HHHHHH, H5, null)
!HHHHHHH5E4 => (HHHHHH, H5, E4)
!HHHHHHH5E4 => (HHHHHH, H5, E4)
!HHHHHHH5E4 => (HHHHHH, H5, E4)
我目前使用的正则表达式模式是
!([^\s]+)(?:(H\d+)|(E\d+)){0,2}
其中组1是前缀(例如attack
),组2是H-改性剂(例如H5
),并且组3是E修饰符(例如E4
)。
现在,组2和组3被组1吞并。将?
投掷到[^\s]+
使其仅匹配第一个字符。投入$
后缀非捕获组根本不工作,除非我脱掉{0,2}
。
Here's a RegExr fiddle for the pattern, with test inputs and expected groups.
那么问题是什么? – kirkpatt
参见['^!(\ S +?)(?:(H \ d +)|(E \ d +)){0,2} $'](https://regex101.com/r/F8L4kh/3)。我认为你需要将这些字符串解析为独立的字符串,对吧? –
@kirkpatt“我正在尝试使用正则表达式匹配字符串,该字符串具有前缀和两个可选后缀,可以按任意顺序排列,前缀和每个后缀分别分组。编辑澄清。对不起,我认为这很明显。 – user2706191