正则表达式修改Google云端硬盘共享文件网址

Mr.*_*rax 6 regex url google-drive-api

我正在尝试创建一个脚本,将常规的Google云端硬盘共享网址转换为直接下载网址.原始URL如下所示:

https://drive.google.com/file/d/FILE_ID/edit?usp=sharing
Run Code Online (Sandbox Code Playgroud)

并需要转换为如下所示:

https://drive.google.com/uc?export=download&id=FILE_ID
Run Code Online (Sandbox Code Playgroud)

因此,我正在尝试使用我不熟悉的正则表达式来获取要删除/更改的所需文本.我正在使用RegExr尝试创建它,但我只能得到它

/file/d/
Run Code Online (Sandbox Code Playgroud)

我尝试过一种消极的前瞻,但它似乎没有用.有什么建议?

Ped*_*ito 23

2017年3月23日更新


对于PHP:

$link = preg_replace('%https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing%', 'https://drive.google.com/uc?export=download&id=$1', $link);
Run Code Online (Sandbox Code Playgroud)

对于Python:

result = re.sub(r"https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing", r"https://drive.google.com/uc?export=download&id=\1", url)
Run Code Online (Sandbox Code Playgroud)

对于Perl:

$subject =~ s!https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing!https://drive.google.com/uc?export=download&id=$1!g;
Run Code Online (Sandbox Code Playgroud)

对于Java:

String resultString = subjectString.replaceAll("https://drive\\.google\\.com/file/d/(.*?)/.*?\\?usp=sharing", "https://drive.google.com/uc?export=download&id=$1");
Run Code Online (Sandbox Code Playgroud)

对于Ruby:

result = subject.gsub(/https:\/\/drive\.google\.com\/file\/d\/(.*?)\/.*?\?usp=sharing/, 'https://drive.google.com/uc?export=download&id=\1')
Run Code Online (Sandbox Code Playgroud)

对于C#:

resultString = Regex.Replace(subjectString, @"https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing", "https://drive.google.com/uc?export=download&id=$1");
Run Code Online (Sandbox Code Playgroud)

对于R语言:

~gsub("https://drive\\.google\\.com/file/d/(.*?)/.*?\\?usp=sharing", "https://drive.google.com/uc?export=download&id=\\1", subject, perl=TRUE);
Run Code Online (Sandbox Code Playgroud)

对于Javascript:

result = subject.replace(/https:\/\/drive\.google\.com\/file\/d\/(.*?)\/.*?\?usp=sharing/g, "https://drive.google.com/uc?export=download&id=$1");
Run Code Online (Sandbox Code Playgroud)

对于TCL:

regsub -linestop -all {https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing} $subject "https://drive.google.com/uc?export=download\\&id=\\1" result
Run Code Online (Sandbox Code Playgroud)

对于Oracle:

result := REGEXP_REPLACE(subject, 'https://drive\.google\.com/file/d/(.*)/.*?\?usp=sharing', 'https://drive.google.com/uc?export=download&id=\1', 1, 0, 'c');
Run Code Online (Sandbox Code Playgroud)

对于C++:

wxString ;
wxRegEx regexObj(_T("(?p)\\Ahttps://drive\\.google\\.com/file/d/(.*?)/.*?\\?usp=sharing"), wxRE_ADVANCED);
regexObj.ReplaceAll(&subjectString, _T("https://drive.google.com/uc?export=download\\&id=\\1"));
Run Code Online (Sandbox Code Playgroud)

对于Groovy:

Matcher regexMatcher = subjectString =~ /https:\/\/drive\.google\.com\/file\/d\/(.*?)\/.*?\?usp=sharing/
String resultString = regexMatcher.replaceAll('https://drive.google.com/uc?export=download&id=$1');
Run Code Online (Sandbox Code Playgroud)

对于PostgreSQL:

SELECT REGEXP_REPLACE(mycolumn, $$(?p)https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing$$, $$https://drive.google.com/uc?export=download&id=\1$$, 'g') FROM mytable;
Run Code Online (Sandbox Code Playgroud)

对于VisualBasic.NET:

Dim RegexObj As New Regex("https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing")
ResultString = RegexObj.Replace(SubjectString, "https://drive.google.com/uc?export=download&id=$1")
Run Code Online (Sandbox Code Playgroud)

对于Delphi XE:

Dim RegexObj As New Regex("https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing")
ResultString = RegexObj.Replace(SubjectString, "https://drive.google.com/uc?export=download&id=$1")
Run Code Online (Sandbox Code Playgroud)

对于PowerShell:

$regex = [regex] 'https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing'
$result = $regex.Replace($subject, 'https://drive.google.com/uc?export=download&id=$1')
Run Code Online (Sandbox Code Playgroud)

对于Xpath:

fn:replace($input, "https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing", "https://drive.google.com/uc?export=download&id=$1")
Run Code Online (Sandbox Code Playgroud)

对于VBscript:

Dim myRegExp, ResultString
Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "https://drive\.google\.com/file/d/(.*?)/.*?\?usp=sharing"
ResultString = myRegExp.Replace(SubjectString, "https://drive.google.com/uc?export=download&id=$1")
Run Code Online (Sandbox Code Playgroud)

如果您需要其他语言,请告诉我!:)

  • 你忘记了Ruby,R,Logo和C#:) (4认同)
  • +1用于多语言 - 圆形回答 - 踢答案:-D但我们是否会找出所要求的语言... (3认同)
  • +1.现在只需添加Basic,Pascal,ALGOL,COBOL,Excel,Fortran,Go!和Assembly,以及Logo,我就会将花束邮寄到您选择的邮政地址. (3认同)
  • @aliteralmin我会!!! 但请不要送花束,生病与妻子吵架......送一瓶酒!:))))) (3认同)
  • 之后几个小时我会送酒,再送花.确保她们到达时喝醉了. (3认同)
  • @aliteralmind我很惊讶......因为没有收到鲜花;) (3认同)
  • 我没有看到没有Logo !! ;) (2认同)

don*_*uxx 6

不需要正则表达式,因为您可以使用2个链式字符串替换来完成网址转换.参见例如this(在Java中):

String url="https://drive.google.com/file/d/FILE_ID/edit?usp=sharing";
url = url.replace("/file/d/", "/uc?export=download&id=").replace("/edit?usp=sharing", "");
System.out.print(url); 
Run Code Online (Sandbox Code Playgroud)

==>输出:

https://drive.google.com/uc?export=download&id=FILE_ID
Run Code Online (Sandbox Code Playgroud)