Ruby 正则表达式 - 在找到两个字符中的第一个时停止
Ruby regex - stop when found first of two chars
假设我有以下包含 4 个元素的数组:
myArray = [
"elasticsearch/elasticsearch-analysis-icu/2.4.2",
"lukas-vlcek/bigdesk/2.5.0",
"royrusso/elasticsearch-HQ",
"polyfractal/elasticsearch-inquisitor"
]
迭代时,我想将一个子字符串赋值给一个变量,导致:
0) analysis-icu
1) bigdesk
2) HQ
3) inquisitor
我试过正则表达式 (.*\/(?:elasticsearch-)?(.*)(?:\/.*|\z))
但它不会在 /
处停止
我怎样才能让它匹配到每个元素字符串的末尾或在第二个 /
,如果有的话?
这里是在线测试员:http://rubular.com/r/t8ws1BbOU6
如果您喜欢 puppet,完整代码如下:
elasticsearch::plugin {[
"elasticsearch/elasticsearch-analysis-icu/2.4.2",
"lukas-vlcek/bigdesk/2.5.0",
"royrusso/elasticsearch-HQ",
"polyfractal/elasticsearch-inquisitor"
]}
并且:
$es_plugin_dir = regsubst($name, '(.*\/(?:elasticsearch-)?(.*)(?:\/.*|\z))', '')
在我看来 this regex 应该适合你:
(^[^\/]*?\/(?:[^\/-]*?\-)?([^\/]*?)(?=\/[^\/]*?$|$).*)
这是您更新后的代码:
$es_plugin_dir = regsubst($name, '(^[^\/]*?\/(?:[^\/-]*?\-)?([^\/]*?)(?=\/[^\/]*?$|$).*)', '')
假设我有以下包含 4 个元素的数组:
myArray = [
"elasticsearch/elasticsearch-analysis-icu/2.4.2",
"lukas-vlcek/bigdesk/2.5.0",
"royrusso/elasticsearch-HQ",
"polyfractal/elasticsearch-inquisitor"
]
迭代时,我想将一个子字符串赋值给一个变量,导致:
0) analysis-icu
1) bigdesk
2) HQ
3) inquisitor
我试过正则表达式 (.*\/(?:elasticsearch-)?(.*)(?:\/.*|\z))
但它不会在 /
我怎样才能让它匹配到每个元素字符串的末尾或在第二个 /
,如果有的话?
这里是在线测试员:http://rubular.com/r/t8ws1BbOU6
如果您喜欢 puppet,完整代码如下:
elasticsearch::plugin {[
"elasticsearch/elasticsearch-analysis-icu/2.4.2",
"lukas-vlcek/bigdesk/2.5.0",
"royrusso/elasticsearch-HQ",
"polyfractal/elasticsearch-inquisitor"
]}
并且:
$es_plugin_dir = regsubst($name, '(.*\/(?:elasticsearch-)?(.*)(?:\/.*|\z))', '')
在我看来 this regex 应该适合你:
(^[^\/]*?\/(?:[^\/-]*?\-)?([^\/]*?)(?=\/[^\/]*?$|$).*)
这是您更新后的代码:
$es_plugin_dir = regsubst($name, '(^[^\/]*?\/(?:[^\/-]*?\-)?([^\/]*?)(?=\/[^\/]*?$|$).*)', '')