主要问题有点简短,所以我将进行协作。我正在为twitter构建一个应用程序,你可以用它来做基本的操作(获取帖子,做帖子,回复等)。
现在我想,如果我在我的应用程序中检查最大140个字符的限制,这将是一个好主意。到目前为止一切都很好,然后有人问我是否也可以做url-shortener的事情。
因此,目前我有一个正则表达式,它可以选择最多(实际上太多)的url,取它们的长度,然后添加或推导出140最大值的差值。这仍然是一个错误,但我可以做到。
现在我的问题..。
看起来推特在他们认为是url的地方相当挑剔:我得到了最基本的url(从http://开始),但推特也很容易替换一些tld,(www..net/.biz/.info只是其中的一小部分)而不是.nl .de .tk
现在我在想,也许有人已经发现了哪些是他们做的,哪些是他们不“缩短”的。
现在,因为我非常确定我的正则表达式也不是最好的,所以我在这里也不再赘述:
((http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)|([\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?)发布于 2012-05-09 16:46:49
我想通了,我在tld wikipage上找到了一句很重要的话。它规定所有国家的TLD都是两个字符长度。反之亦然;所有2个char tld都是国家/地区。考虑到这一点,我开始用twitter测试了其中的一大堆,我非常确定我现在知道了twitter缩短了哪些url,哪些没有缩短。
所有的url都以://或https://
现在要为它构建一个正则表达式,一旦我认为我有了它,我就会把它发布到这里: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不接受。
我希望这能在未来对某些人有所帮助。我很确定在网络上不会有很多关于这个的信息(或者至少我找不到)。
发布于 2012-05-09 16:15:01
http://support.twitter.com/articles/78124-how-to-shorten-links-urls#指出,发布到推特上的所有URL都将被重写为恰好19个字符。
发布于 2012-05-09 12:53:18
我正在使用这个:var url_expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;没有人抱怨:)
https://stackoverflow.com/questions/10500117
复制相似问题