结合豆瓣基础API学习XML包

很久以前在R-Forge上注册过一个RDouban项目, 想用豆瓣提供的API做点好玩的事情. 可惜后来只写了个开头, 感兴趣的童鞋可以无条件认领. 在这里结合豆瓣的基础API, 非常简略地写一下用XML包读数据的基本问题.

1 XPath

花十分钟学习XPath语法.
熟练后可使用Firebug等调试工具直接提取. 此外, 要特别注意XML命名空间问题. (感谢yixuan提醒)

2 Douban API

花n分钟阅读"豆瓣API参考手册".
用户的评论、收藏、广播、豆邮等交互功能往往需要先进行OAuth认证, 建议阅读RFC5849以充分理解OAuth协议. 这块目前也有ROAuth包可以实现, 不过与读数据没什么关系, 此略.

继续阅读

正则简单笔记

1. 元字符 (Metacharacter)

匹配字符串的开始(位置):  ^

匹配字符串的开始(不受处理多行选项影响):  A

匹配字符串的结束(位置):  $

匹配字符串的结束(不受处理多行选项影响):  z

匹配字符串的开始/结束(位置):  b

匹配字符串的结束/行尾(不受处理多行选项影响):  Z

匹配数字/字母/下划线/汉字:  w

匹配(阿拉伯)数字:  d

匹配空白符(空格/全角空格/制表符/换行符):  s

匹配横向制表符:  t

匹配竖向制表符:  v

匹配回车:  r

匹配换行符:  n

匹配换页符:  f

匹配任意字符(除换行符n):  .

前述表达式重复任意次:  *

2. 元字符转义 (查找元字符本身)

.  *  \  ^  $  等.

3. 字符类 (自定义的元字符):  [ ]

e.g. [13579] 匹配1或3或5或7或9中的任意一个数字.

4. 限定符 (规定表达式重复次数)

重复至少0次:  *

重复至少1次:  +

重复0次或1次:  ?

重复n次:  {n}

重复n次或更多次:  {n,}

重复m到n次:  {m,n}

e.g. d{2,9} 匹配2-9位阿拉伯数字.

5. 分枝:  |

p.s. 分枝条件按照从左到右的顺序测试. 如果已满足了某个分枝, 则匹配结束. 故使用分枝条件时, 一定要反复斟酌各个条件的书写顺序.

6. 反义

对于元字符, 把元字符里的字母小写换为大写即表示反义. 对于字符类, [^13579] 匹配除了1或3或5或7或9以外的任意字符. 一个不错的例子:

<a[^>]+> 匹配用尖括号括起来的以a开头的字符串

7. 分组:  ( )

和编程写公式时多加括号防止写错有点类似. 不过这里的现实意义强得多, 可以用来写出比较复杂的表达式.

8. 贪婪/懒惰

在正则表达式中, [最先开始的匹配] 拥有最高优先权. 其次才是默认的贪婪匹配原则. 与之对应的懒惰匹配原则:

重复0次或1次:  ??

重复至少1次:  +?

重复m到n次:  {m,n}?

重复n次以上:  {n,}?

重复任意次:  *?

9. 零宽断言

(1) 零宽度正预测先行断言:  (?=exp)

断言此位置之后能匹配表达式exp

e.g. bw+(?=lyb) 匹配以ly结尾的字符串的前面部分.

(2) 零宽度正回顾后发断言:  (?<=exp)

断言此位置之前能匹配表达式exp

e.g. (?<=bpre)w+b 匹配以pre开头的字符串的后面部分.

(3) 零宽度负预测先行断言:  (?!exp)

断言此位置之后不能匹配表达式exp

e.g. b((?!exe)w)+b 匹配不包含连续字符串exe的字符串.

(4) 零宽度负回顾后发断言:  (?<!exp)

断言此位置之前不能匹配表达式exp

e.g. (?<!010)d{8} 匹配前面不是010的8位数字.

10. 注释

(?#注释内容)