Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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,我有一个字符串: app_copy--28.ipa 我想要的结果是: app_copy --后面的数字可以是可变长度的,因此我希望匹配所有内容,包括--和之后的内容 我尝试了几种模式,但由于某些原因,没有一种模式匹配: gsub("--\*", "") gsub("--*", "") gsub("--*.ipa", "") gsub("--\[0-9].ipa", "") 我错过了什么?这是怎么回事 str = "app_copy--28.ipa" str[0..str.index("-"

我有一个字符串:

app_copy--28.ipa
我想要的结果是:

app_copy
--
后面的数字可以是可变长度的,因此我希望匹配所有内容,包括
--
和之后的内容

我尝试了几种模式,但由于某些原因,没有一种模式匹配:

gsub("--\*", "")
gsub("--*", "")
gsub("--*.ipa", "")
gsub("--\[0-9].ipa", "")
我错过了什么?

这是怎么回事

str = "app_copy--28.ipa"
str[0..str.index("-")-1]
# => "app_copy"

str = "app_copy--28.ipa"
str.split("--").first
# => "app_copy"
这是怎么回事

str = "app_copy--28.ipa"
str[0..str.index("-")-1]
# => "app_copy"

str = "app_copy--28.ipa"
str.split("--").first
# => "app_copy"

让我们看看您的测试模式:

  • “--\*”
    实际上等同于
    “--*”
    (因为
    \*
    是一个转义序列)
  • “-*”
    将匹配单个
    -
    字符,后跟零个或多个
    -
    字符
  • “-*.ipa”
    将匹配单个
    -
    字符,后跟零个或多个
    -
    字符,后跟任何单个字符,后跟文字
    ipa
  • “-\[0-9].ipa”
    实际上相当于
    “-[0-9].ipa”
    (因为
    \[
    是一个转义序列),它将匹配一个文本
    -
    ,后跟一个十进制数字,后跟任何单个字符,后跟一个文本
    ipa
但是,这些模式在您使用时都不会起作用,因为它们不会将其视为正则表达式:

模式通常是一个
Regexp
;如果作为
字符串提供,则它包含的任何正则表达式元字符都将按字面解释

您需要将模式转换为
Regexp
(使用),或者使用

试试这个模式

--.*
此模式将查找任何文本
--
,后跟零个或多个字符

例如:

"app_copy--28.ipa".gsub(/--.*/, "")     # app_copy

让我们看看您的测试模式:

  • “--\*”
    实际上等同于
    “--*”
    (因为
    \*
    是一个转义序列)
  • “-*”
    将匹配单个
    -
    字符,后跟零个或多个
    -
    字符
  • “-*.ipa”
    将匹配单个
    -
    字符,后跟零个或多个
    -
    字符,后跟任何单个字符,后跟文字
    ipa
  • “-\[0-9].ipa”
    实际上相当于
    “-[0-9].ipa”
    (因为
    \[
    是一个转义序列),它将匹配一个文本
    -
    ,后跟一个十进制数字,后跟任何单个字符,后跟一个文本
    ipa
但是,这些模式在您使用时都不会起作用,因为它们不会将其视为正则表达式:

模式通常是一个
Regexp
;如果作为
字符串提供,则它包含的任何正则表达式元字符都将按字面解释

您需要将模式转换为
Regexp
(使用),或者使用

试试这个模式

--.*
此模式将查找任何文本
--
,后跟零个或多个字符

例如:

"app_copy--28.ipa".gsub(/--.*/, "")     # app_copy

不要使用
gsub
尝试更改字符串,只需使用模式匹配所需零件即可:

"app_copy--28.ipa"[/^(.+?)--/, 1] # => "app_copy"
字符串需要许多不同类型的参数。您可以传入模式和所需捕获的索引,以仅提取该部分。从文档中:

str[regexp, capture] → new_str or nil
如果提供了Regexp,则返回字符串的匹配部分。如果捕获跟随正则表达式(可能是捕获组索引或名称),则跟随正则表达式,则将返回MatchData的组件


不要使用
gsub
尝试更改字符串,只需使用模式匹配所需零件即可:

"app_copy--28.ipa"[/^(.+?)--/, 1] # => "app_copy"
字符串需要许多不同类型的参数。您可以传入模式和所需捕获的索引,以仅提取该部分。从文档中:

str[regexp, capture] → new_str or nil
如果提供了Regexp,则返回字符串的匹配部分。如果捕获跟随正则表达式(可能是捕获组索引或名称),则跟随正则表达式,则将返回MatchData的组件


“app\u copy--28.ipa”.gsub(--.*,”)
产生与原始输入相同的结果。@maq-ahh,对不起,它必须是正则表达式文本(
/…/
),请参阅我的更新答案。
“app\u copy--28.ipa.gsub(--.*,”)
产生与原始输入相同的结果。@maq-ahh,对不起,它必须是正则表达式文本(
/…/
),请参阅我的最新答案。