Ruby 将子字符串与前面的或组合匹配
我正在尝试以以下格式提取子字符串:Ruby 将子字符串与前面的或组合匹配,ruby,regex,Ruby,Regex,我正在尝试以以下格式提取子字符串: preceeding-string-data-i-want 其中: preceeding-string 应该是stringA或stringB或stringC中的一个 我尝试使用: (?:stringA|stringB|stringC)-?([A-Za-z\d]*) 但这会导致不正确的匹配。我不知道我错在哪里 --编辑-- 匹配stringA-pine-9000会将stringA-pine和pine作为匹配项提供给我。类似这样的东西应该会起到作用: ((s
preceeding-string-data-i-want
其中:
preceeding-string
应该是stringA
或stringB
或stringC
中的一个
我尝试使用:
(?:stringA|stringB|stringC)-?([A-Za-z\d]*)
但这会导致不正确的匹配。我不知道我错在哪里
--编辑--
匹配
stringA-pine-9000
会将stringA-pine
和pine
作为匹配项提供给我。类似这样的东西应该会起到作用:
((stringA)|(stringB)|(stringC))-?([A-Za-z\d]*)
它将匹配:stringA-dataiwantff
,stringb-DataIWant
,stringC-DataIWant 123
,但不匹配stringD-DataIWant
,它将匹配stringC-DataIWant
中除
之外的所有内容
我看到的问题是,在data-I-want
部分中,您包含了破折号(-
),而您在原始正则表达式中没有包含破折号。我假设'data-I-want'不包含破折号。如果有,则可以这样添加:
((stringA)|(stringB)|(stringC))-?([A-Za-z\d\-]*)
这将匹配以下类型的内容:
stringA-Data-I-Want
如果要匹配pine-9000
,可能需要在第二组中允许的字符集中包含-
:
(?:stringA|stringB|stringC)-?([A-Za-z\d-]*)
什么类型的不正确匹配?(请详细说明你所看到的错误行为。)以你的例子来说,你希望得到什么样的匹配?在这种情况下,唯一的反应是,不要!谢谢