Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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
Regex 我如何模仿Twitter的url缩短器?_Regex_Twitter_Tld - Fatal编程技术网

Regex 我如何模仿Twitter的url缩短器?

Regex 我如何模仿Twitter的url缩短器?,regex,twitter,tld,Regex,Twitter,Tld,主要的问题有点短,所以我会合作。 我正在为twitter构建一个应用程序,你可以用它执行基本操作(获取帖子、发帖、回复等) 现在我想,如果我检查一下我的应用程序中的最大140个字符的限制,那将是一个好主意。 到目前为止还不错,然后有人问我是否也可以做网址缩短的事情 所以现在我有一个正则表达式,它选择了op-most(事实上太多)url,取它们的长度,或者加上或者减去140 max的差值。 这仍然是一辆马车,但我能应付 现在我的问题 twitter似乎对他们认为的url相当挑剔: 我得到了最基本的

主要的问题有点短,所以我会合作。 我正在为twitter构建一个应用程序,你可以用它执行基本操作(获取帖子、发帖、回复等)

现在我想,如果我检查一下我的应用程序中的最大140个字符的限制,那将是一个好主意。 到目前为止还不错,然后有人问我是否也可以做网址缩短的事情

所以现在我有一个正则表达式,它选择了op-most(事实上太多)url,取它们的长度,或者加上或者减去140 max的差值。 这仍然是一辆马车,但我能应付

现在我的问题

twitter似乎对他们认为的url相当挑剔: 我得到了最基本的(从http开始)://等等),但twitter也很容易取代一些tld,(www.google.com[whatever].net/.biz/.info只是其中的一部分) 但不是

现在我想知道是否有人发现了哪些是他们做的,哪些不是他们“缩短”的

现在,因为我很确定我的正则表达式也不是最好的,所以我也将在这里放弃它:

((http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)|([\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)

我使用的是:
var-url\u表达式=/[-a-zA-Z0-9@:%\+.~\.~?&/=]{2256}.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%\+.~\\.~?&/=]*)/gi没有人抱怨:)

表示所有发布到Twitter上的URL都将被重写为正好19个字符长。

我想出来了,我在tld wikipage上发现了一行非常重要的内容。它指出所有国家TLD的长度都是两个字符。反之亦然;所有2个字符tld均为国家/地区。考虑到这一点,我开始用twitter测试其中的一些,我很确定我现在知道twitter缩短了哪些url,哪些url没有缩短

  • 所有url都以http://或https开头://
  • 所有的url都像[某物]。[非国家tld]#com.biz.mobi等(除了.arpa和.aero)
  • 所有url都像[某物].[某物].[有效tld]#包括国家/地区

  • 像http://[user]:[pass]@[something].[tld]这样的链接将不会缩短

现在要为它构建一个正则表达式,我会尽快将它发布到这里:D

这就是我到目前为止所得到的:

/(^(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?:(?:[-\w]+\.)+(?:com|asia|cat|coop|edu|int|tel|pro|org|net|gov|mil|biz|info|mobi|name|jobs|museum|travel|([a-z]{2})))(?::[\d]{1,5})?(?:(?:(?:\/(?:[-\w~!$+|.,=\(\)]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?)/gim;
它仍然存在一个主要缺陷,即它也接受[domain].[tld],而twitter不接受


我希望这将有助于未来的人。我敢肯定,在网上找到这方面的信息并不容易(或者至少我找不到它)。

推特URL,看看另一端会出现什么?哈哈,我在考虑尝试所有可能的组合。但那要花我不少时间!事实上,我只是半认真的,但仔细想想,这可能是正确的选择。从简单开始,收集结果推文,解决输出与预期不符的推文;起泡、冲洗、重复,最后几乎加在一起。但我很高兴地说,我正在到达那里!对我来说不起作用,它捕获了我需要捕获的大约50%的URL。很抱歉,我猜我的用户只是发布了非常干净/统一的URL。我希望每个“我使用这个正则表达式,没有人抱怨过”的例子都有0.0001美元,其中正则表达式有点小错误。(没有详细检查过你的,只是说“.”没问题,谢谢!我想我有点明白了twitter的期望:)我已经找到了那个页面。目前是20(https是21)。“直到最近,Twitter上所有基于HTTP的t.co链接都只有19个字符长。8月15日分阶段实施的部分内容是将t.co URL的默认长度增加到20个字符。虽然我们预计t.co链接的长度不会经常更改,但我们想提醒您检查GET的短URL长度和短URL长度\U https字段每日帮助/配置,而不是依赖硬编码的值。从twitter开发页面。你说的“tld wikipage”是什么意思?你也尝试过IDNA域名吗?我的意思是,我刚刚检查了你提供的链接,Twitter也缩短了它。