作者godspeedlee (我是好人,也是个坏人)
看板RegExp
标题Re: [问题] 怎麽取得/ 之间的字串
时间Sat Jun 25 17:00:35 2011
※ 引述《knives ()》之铭言:
: 我有一个字串
: http://www.tudou.com/programs/view/Bic3TWWQrRY/
: 我想要取得最後一个Bic3TWWQrRY
: 我的想法是 /\/[\w+]*\//
: 可是最後会取到/Bic3TWWQrRY/
: 要怎麽把左右两个/拿掉阿
: 谢谢回答
用 RegexBuddy 测试过 ok
http://\w+(?:\.[-\w]+)*/(?:\w+/)+(\w+)/
稍微说明一下:
前面两个 (?:...) 是告诉 regex engine 这只是分组用的,
不需要储存(capture),真正会储存的只有最後一个括号。
第二个 (?:...) 会一路把所有的 path 吃完,但是因为碰到
(\w+)/ 所以会逐步交还字元直到比对成功
这个 pattern 是随手写的,辨识 url 的范例很多,不想
花时间研究就去抄 Regular Expression Cookbook 就好了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.124.102.177
1F:→ PurpleCrow:如果只为了取Bic3TWWQrRY,为什麽不用(\w+)/$ 06/25 22:28
3F:→ godspeedlee:如果「只有一个字串」那(\w+)/$的确是最佳解 06/26 00:07
4F:→ godspeedlee:另外,个人比较偏好精确一点的比对方式 06/26 00:08
5F:→ PurpleCrow:看不出原po有说是多个字串 06/26 06:16
6F:→ PurpleCrow:看不出哪里比较精确,只是多浪费比对步骤罢了 06/26 06:17
7F:→ PurpleCrow:我有一个字串...我想要取得最後一个Bic3TWWQrRY 06/26 06:24
8F:→ PurpleCrow:阁下似乎能先看清楚题意会比较好 06/26 06:26
11F:→ PurpleCrow:或是可以的话,请你提供你我的式子用RegexBuddy 06/26 06:50
12F:→ PurpleCrow:比对结果会不一样的字串,看看是否有把式子复杂化的必要 06/26 06:52
13F:→ godspeedlee:已经讲过这是"个人偏好" 06/26 15:04
14F:→ godspeedlee:要选择哪一种作法是原po的自由 06/26 15:05
15F:→ godspeedlee:我只是提供一种解答,无意在此题上争辩 06/26 15:09
16F:→ PurpleCrow:因为你的说法好像除了你的比对式,其他人都是较不精确的 06/26 15:35
17F:→ PurpleCrow:不过连.tudou.com都要特别写一个不获取的比对式,不仅复 06/26 15:35
18F:→ PurpleCrow:杂易错,初学者看到只会却步.要精确,以下最精确 06/26 15:35
20F:→ PurpleCrow:只要能正确match目标字串的比对式就是精确的. 06/26 15:36
21F:→ PurpleCrow:而且比对式愈短愈好,这不就是Regex的目的? 06/26 15:36
22F:→ godspeedlee:抱歉我的推文让您这样解读,的确是我用词不当 06/26 15:36
23F:→ godspeedlee:让您受到刺激 06/26 15:40
24F:→ godspeedlee:的确您的写法初学者比较容易上手 06/26 15:42
25F:→ godspeedlee:以前我也是这麽写的 06/26 15:43
26F:→ PurpleCrow:所以你现在的意思是你会初学者较不懂的(?:pattern)很厉 06/26 15:53
27F:→ PurpleCrow:害就是了?我的确受到了刺激,一个简单的匹配,居然可以把 06/26 15:53
28F:→ PurpleCrow:式子写得那麽冗长.那麽如果是多个字串我想式子应该会长 06/26 15:54
29F:→ PurpleCrow:到爆吧. 06/26 15:54
30F:→ godspeedlee:哈哈哈,被您说中了 06/26 16:01
31F:→ PurpleCrow:教你一个式子 (\w+)/(?!\w) 用RegexBuddy测试看看吧 06/26 16:05
32F:→ PurpleCrow:Regex要像你这样用的话,劝你真的直接把目标字串以外 06/26 16:05
34F:→ PurpleCrow:全都直接比对,比较不会出错 06/26 16:06
35F:→ godspeedlee:啊,慢者,我有另外一个想法,不晓得对不对。 06/27 00:46
36F:→ godspeedlee:假如我错的话,希望你纠正我,让我们来共同看看这件事 06/27 00:47
37F:→ godspeedlee:假如原po要的是Bic3TWWQrRY,那直接搜寻"Bic3TWWQrRY" 06/27 00:47
38F:→ godspeedlee:不是更快吗?连regex都省了 06/27 00:47
39F:→ PurpleCrow:那你应该去问原po阿,或许真的如你说的那样 06/27 08:55
40F:→ PurpleCrow:就可惜了可以卖弄把简单复杂化的机会 06/27 08:55
41F:→ PurpleCrow:土豆网的下载点脚本我也有在用,我通常都是要下载复数个 06/27 09:06
42F:→ PurpleCrow:原po只需要下载一个的机率不大 06/27 09:06
43F:→ PurpleCrow:网页中要取得载点的资讯所需字串通常要复数个匹配 06/27 09:07
44F:→ PurpleCrow:真希望见识见识以你的方式一个式子去匹配看看呢 ^_^ 06/27 09:07
45F:→ PurpleCrow:喔 题外话 我跟我的同好都是在比式子愈精简愈好 06/27 09:07
46F:→ PurpleCrow:如果比对式跟原字串差不多长是会被笑话的 06/27 09:07
47F:→ PurpleCrow:无意冒犯 请见谅 06/27 09:07
48F:→ godspeedlee:不知道这样讲对不对,老外的书都写的挺长的呢 06/28 01:00
49F:→ godspeedlee:也许您可以发个信与这些老外交流一下 06/28 01:01
50F:→ godspeedlee:国内同好跟国外同好交流一下 06/28 01:02
51F:→ godspeedlee:不知道您意下如何呢? 06/28 01:04
※ 编辑: godspeedlee 来自: 122.124.100.96 (06/28 01:12)
52F:→ PurpleCrow:恩 国要的月亮比较圆 老外的屁都是香的 06/28 08:37
53F:→ PurpleCrow:不知道这样讲对不对? 06/28 08:37
54F:→ PurpleCrow: 外 06/28 08:38
55F:→ PurpleCrow:简单的说 就是想卖弄嘛 不知道这样讲对不对? 06/28 08:39
56F:→ PurpleCrow:如果老外的式子都要写得又臭又长才能匹配目标字串 06/28 08:41
57F:→ PurpleCrow:恕小弟我没兴趣交流,小弟的同好更不用说了 06/28 08:43
58F:→ PurpleCrow:我还是习惯用不精确却可以正确匹配目标字串的简短式子 06/28 08:47
59F:→ PurpleCrow:不知道您觉得这样可不可以呢? 06/28 08:49
60F:→ PurpleCrow:喔 不精确却可以正确匹配目标字串 这句好矛盾 请无视之 06/28 08:50
61F:推 badwork:偏离主题啦... 06/28 22:57