作者hpo14 (雨)
看板Ruby
标题[问题] 1.8.7 的读档与正规表达式 Regexp
时间Fri Apr 26 19:28:06 2013
解决了 @@"" 情况如最末端补充
环境: Ruby 1.8.7 (iBook G4 with Mac OSX 10.5)
要求:对档案(html档, Encoding Big5)做 Regexp 取得我要的 Match Group ( 0 ~ n 个)
我的Regexp如网址内:
http://rubular.com/r/XnsTZI6AEu
已确定我的 Regexp 在 rubular 是可以取得我目标结果的
成功状况:
手动在 Terminal 下执行时 (黄色同为一行),正确有结果
hpo14:~$ ruby -e
"s = File.open('绝对路径').read();
m = s.scan(我的正规表达式); puts m"
失败状况:
1. 指令存成档案(如下虚线内),手动 Terminal 执行 .rb 档
2. 透过 AppleScript 执行 "do shell script xxxx"
(xxx 为成功状况的 ruby -e 那一整串)
不管是 1 or 2, puts 结果如下,不知道是哪边问题 @@
puts m #-> 没结果
puts m.to_a #-> []
puts m.to_s #-> ""
------>8-------
#!/usr/bin/env ruby
s = File.open("档案绝对路径").read()
r = /我的Regexp/i #忽略大小写
m = s.scan(r)
puts m
------>8-------
hpo14:~$ ./test.rb
hpo14:~$
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.204.46.87
1F:推 kusoayan:在 irb 跑有成功? 04/26 19:31
※ 编辑: hpo14 来自: 123.204.46.87 (04/26 19:34)
2F:→ hpo14:不好意思,请问 irb 是? (碰 ruby 才 2 天) @@ 04/26 19:35
3F:→ hpo14:irb -v #-> irb 0.9.5(05/04/13) 04/26 19:36
4F:→ mars90226:irb里可以输入ruby并执行 04/26 19:47
5F:→ mars90226:话说你的档案要不要加上# encoding: big5 04/26 19:48
刚刚发现 text.rb 存档时
文件编码设定为 UTF-8, 对 Big-5 编码的档案 scan 後 #-> []
BIG-5, 对 Big-5 #-> 成功
UTF-16,对 UTF-16 #-> []
但是在 AppleScript 内接回来的结果,中文变乱码....
※ 编辑: hpo14 来自: 123.204.46.87 (04/26 20:10)
6F:→ hpo14:我猜应该是编码问题了 @@" 04/26 20:15
原来在 AppleScript 内的 regex 字串会是 UTF-8 编码,
然後送到 do shell sciprt 後, 档案是 Big5 编码,所以 Regexp 没结果。
因此我把 Ruby 部份的程式码改写成档案(如上所示),并把 Regex 写在档案内
且档案存成 Big5 编码。
然後在 AppleScript 内改成如下方式呼叫,同时利用 iconv 将结果转 UTF-8
(两行应为同一行)
set Result to
do shell "./test.rb '" & fpath & "'" & " | iconv -t UTF8 -f BIG5"
好处 1. 做正规表达搜寻时,是 Big5 找 Big5, 理论上应该不会有问题
2. iconv 部份可以确保我在 AppleScript 内处理字串时不会因为系统环境设定
的语言而造成编码问题
※ 编辑: hpo14 来自: 123.204.46.87 (04/26 20:54)
※ 编辑: hpo14 来自: 123.204.46.87 (04/26 20:55)