在Ruby中使用正则表达式提取行的第一个单词

Thi*_*ork 3 ruby regex

我有这个文本块:

XQuery programming language
C# programming language
declarative programming
XSLT programming language
Haskell programming language vs F* programming language
Run Code Online (Sandbox Code Playgroud)

我想检索编程语言的名称.

我试过类似的东西

matches = string.scan('/(\w)*\sprogramming language/i')
Run Code Online (Sandbox Code Playgroud)

但这给了我这个:

[]
[]
[]
[]
Run Code Online (Sandbox Code Playgroud)

虽然我想要一个像这样的数组:

['XQuerye','C#','XSLT','Haskell']
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Avi*_*Raj 6

您必须删除正则表达式分隔符周围的引号 /

string.scan(/\S+(?=\sprogramming language)/i)
Run Code Online (Sandbox Code Playgroud)

\S+匹配一个或多个非空格字符.(?=\sprogramming language)确定匹配必须后跟空格和programming language字符串的正向前瞻.i修饰符使正则表达式引擎执行不区分大小写的匹配.

DEMO

irb(main):001:0> str = "XQuery programming language
irb(main):002:0" C# programming language
irb(main):003:0" declarative programming
irb(main):004:0" XSLT programming language
irb(main):005:0" Haskell programming language vs F* programming language"
=> "XQuery programming language\nC# programming language\ndeclarative programming\nXSLT programming language\nHaskell programming language vs F* programming language"
irb(main):007:0> str.scan(/\S+(?=\sprogramming language)/i)
=> ["XQuery", "C#", "XSLT", "Haskell", "F*"]
Run Code Online (Sandbox Code Playgroud)