将子字符串与前面的OR组合匹配

时间:2012-01-25 06:15:08

标签: ruby regex

我正在尝试以这种格式提取子字符串:

preceeding-string-data-i-want

其中:

preceeding-string

应该是stringAstringBstringC之一。

我尝试使用:

(?:stringA|stringB|stringC)-?([A-Za-z\d]*)

但这会导致不正确的匹配。我无法弄清楚我哪里出错了。

- 编辑 -

匹配stringA-pine-9000会将stringA-pinepine作为匹配。

2 个答案:

答案 0 :(得分:1)

如果您想匹配pine-9000,您可能需要在第二组允许的字符集中加入-

(?:stringA|stringB|stringC)-?([A-Za-z\d-]*)

答案 1 :(得分:0)

这样的事情可以解决问题:

((stringA)|(stringB)|(stringC))-?([A-Za-z\d]*)

它将匹配:stringA-dataIWantfffstringBDataIWantstringC-DataIWant123但不匹配stringD-DataIWant,它将匹配除@ stringC-DataIWant@以外的所有内容

我看到的问题是,在data-i-want部分,您添加了破折号(-),这些破折号未包含在原始正则表达式中。我假设`data-i-want-不包含破折号。如果是,那么你可以像这样添加它:

((stringA)|(stringB)|(stringC))-?([A-Za-z\d\-]*)

这将匹配某种类型:stringA-Data-I-Want