Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 将子字符串与前面的或组合匹配_Ruby_Regex - Fatal编程技术网

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-]*)

什么类型的不正确匹配?(请详细说明你所看到的错误行为。)以你的例子来说,你希望得到什么样的匹配?在这种情况下,唯一的反应是,不要!谢谢