Ruby 除了最后的.json之外,如何匹配字符串中的所有内容?

Ruby 除了最后的.json之外,如何匹配字符串中的所有内容?,ruby,regex,Ruby,Regex,考虑到这个字符串 "www.monkeysports.com%2Fcontent%2F123.json" 除了最后的“.json”部分之外,我正在尝试匹配这里的所有内容。换句话说,我想要一个正则表达式,它将执行以下操作: sum_regex.match("www.monkeysports.com%2Fcontent%2F123.json") => "www.monkeysports.com%2Fcontent%2F123" 仅使用正则表达式就可以做到这一点吗?使用 使用 试试这个

考虑到这个字符串

 "www.monkeysports.com%2Fcontent%2F123.json"
除了最后的“.json”部分之外,我正在尝试匹配这里的所有内容。换句话说,我想要一个正则表达式,它将执行以下操作:

 sum_regex.match("www.monkeysports.com%2Fcontent%2F123.json")
 => "www.monkeysports.com%2Fcontent%2F123"
仅使用正则表达式就可以做到这一点吗?

使用

使用

试试这个:

t = 'www.monkeysports.com%2Fcontent%2F123.json'
t.match( /^(.*)\.json$/ )[1]
试试这个:

t = 'www.monkeysports.com%2Fcontent%2F123.json'
t.match( /^(.*)\.json$/ )[1]

您可以使用仅为测试且不属于最终结果一部分的前瞻:

sum_regex.match("www\.monkeysports\.com%2Fcontent%2F123(?=\.json\z)")
(?=…)
先行断言(即后跟)

\z
字符串锚点的末端


注意:不要忘记转义特殊字符的点。

您可以使用只作为测试的前瞻,而不是最终结果的一部分:

sum_regex.match("www\.monkeysports\.com%2Fcontent%2F123(?=\.json\z)")
(?=…)
先行断言(即后跟)

\z
字符串锚点的末端


注意:不要忘记转义特殊字符的点。

诀窍是告诉正则表达式引擎选择您想要的,并排除您不想要的:

"www.monkeysports.com%2Fcontent%2F123.json"[/^(.+)\.json/, 1] # => "www.monkeysports.com%2Fcontent%2F123"
这是因为:

  • 允许我们传入正则表达式,然后将其应用于字符串
  • 模式
    /^(+)\.json/
    基本上说,“从字符串的开头开始,然后选择所有内容,直到找到“.json”
  • [/^(+)\.json/,1]
    中,“1”表示返回字符串的捕获部分。换句话说,返回在括号内找到的与该部分匹配的内容。这就是文档中“
    str[regexp,capture]
    的意思

诀窍是告诉正则表达式引擎选择您想要的,并排除您不想要的:

"www.monkeysports.com%2Fcontent%2F123.json"[/^(.+)\.json/, 1] # => "www.monkeysports.com%2Fcontent%2F123"
这是因为:

  • 允许我们传入正则表达式,然后将其应用于字符串
  • 模式
    /^(+)\.json/
    基本上说,“从字符串的开头开始,然后选择所有内容,直到找到“.json”
  • [/^(+)\.json/,1]
    中,“1”表示返回字符串的捕获部分。换句话说,返回与括号内的部分匹配的结果。这就是文档中所说的“
    str[regexp,capture]
    ”的意思

您还可以将chomp与ruby脚本中的其他方法/函数/命令相结合。您还可以将chomp与ruby脚本中的其他方法/函数/命令相结合。您可以使用
*
的贪婪性来消耗整个字符串,然后使正则表达式引擎备份,直到找到一个点:
/(*)[。]/xm
…但这当然不是正则表达式的工作。@7stud:是的,确实有可能(而且更短),但由于回溯,它可能会更慢,并且不会检查字符串是否以
.json
结尾。拆分/联接方法也很有趣。您可以使用
*
的贪婪性来使用整个字符串,然后使正则表达式引擎备份,直到找到一个点:
/(.*)[.]/xm
…但这当然不是正则表达式的工作。@7stud:是的,这确实是可能的(而且更短),但由于回溯,它可能会更慢,并且不会检查字符串是否以
.json
结尾。拆分/连接方法也可能很有趣。当你问一个关于代码的问题时,你需要展示你所做的尝试,并解释为什么它不适合你。请参见“常见问题解答”中的#3。当你问一个关于代码的问题时,你需要展示你所做的尝试,并解释为什么它不适合你。请参见“常见问题解答”中的#3。