ruby regex 提取单引号之间的单词

dav*_*ghz 3 ruby regex

我正在寻找匹配的正则表达式:

ciao: c'iao 'ciao'
Run Code Online (Sandbox Code Playgroud)

和:

ciao #every word excluding non-word character
c'iao #including apostrophes
ciao #excluding the quotes ''
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经能够将前两个要求与:

/[\w']+/
Run Code Online (Sandbox Code Playgroud)

但我正在努力在单引号之间提取单词(不包括引号)。请注意,我不会遇到在引号之间包含带撇号的单词的情况(例如 'c'iao')

我看过很多类似的问答,但没有找到适合我的;包含简要说明的答案的加分:)

Wik*_*żew 5

您可以使用以下表达式:

/\w+(?:'\w+)*/
Run Code Online (Sandbox Code Playgroud)

参见Rubular 演示

表达式匹配:

  • \w+ - 1 个或多个字字符
  • (?:'\w+)*- 零个或多个序列(作为(?:...)*一个非捕获组,该组将使用*量化匹配 0 次或多次出现的量词量化的子模式序列进行分组):
    • ' - 撇号
    • \w+ - 1 个或多个字字符。

在此处查看简短的 Ruby 演示

"ciao: c'iao 'ciao'".scan(/\w+(?:'\w+)*/)
# => [ciao, c'iao, ciao]
Run Code Online (Sandbox Code Playgroud)