プログラマ的京都生活

2012年12月13日

[]URLエンコード

さっと調べたい時があるのでメモ。

irbを起動して、

require 'cgi'

p CGI.escape("あ&い")

これで

%82%A0%26%82%A2

と出力されます。

逆に、

p CGI.escape("%82%A0%26%82%A2")

とやれば、

あ&い

となります。

2011年05月23日

[][]パターンマッチングした部分の抽出

rubyの例から。

str = "hello, world" 
if str =~ /hello, (.+)/ 
    puts $1 
end

これで、「world」が出力されます。

これと同じことをjavascriptでどうやるか、ずっと分からなかったんだけど、ひょんな事から知ることが出来ました。

var str = "hello, world"; 
if (str.match(/hello, (.+)/)) { 
    alert(RegExp.$1); 
}

RegExp.$1だったとは!


今読んでいるこの本に載っていました。

もちろん、Web脆弱性に関する解説本なんだけど、javascriptのこういうテクとかがさらっと載っていたりして1粒で2度美味しい仕掛けになっています。この先もこういうのが散らばっているかと思うと楽しみです♪

体系的に学ぶ 安全なWebアプリケーションの作り方

体系的に学ぶ 安全なWebアプリケーションの作り方

2010年08月15日

[][]空白で区切るんだけど、"で囲まれている中の空白は無視する

@kompiroさんのつぶやきに触発されてtryしてみた。

growlnotify -n "Quick JUnit"」をProcessBuilderに食わせるために"growlnotify","-n","Quick JUnit"と分割して上げたいのだけれど、いい方法が見つからない><。もしかしてさくっと出来たりしないのかな。

単純にsplit(" ")すると"growlnotify","-n",""Quick","JUnit""という残念な感じになる。splitの引数は正規表現だけど、うまくクォート文字列を扱う方法は分からなかった。精進がたらんなあ。

さくっとできると思ってtryしたんだけど、さくっとはできなかったです。。

「空白で区切るんだけど、"で囲まれている中の空白は無視する」ってのが正規表現で表現できれば良かったんだけど、難しいですね。分からなかった。

splitの正規表現で一発!とはいかなかったものの、一応出来たので残しておきます。

String target = "growlnotify -n \"Quick JUnit\"";

Matcher m = Pattern.compile("\"(.+)\"|(\\S+)").matcher(target);
while(m.find()) {
    String s = m.group(1) != null ? m.group(1) : m.group(2);
    System.out.println(s);
}

本質は同じだけど、rubyで書くとちょっとすっきりするので、見かけ上ましになった気がするw

matches = 'rowlnotify -n "Quick JUnit"'.scan(/"(.+?)"|(\S+)/)
matches.each do |m|
  puts m[0] || m[1]
end

あぁ気になる!誰かもっといい回答をッ!!

2010年04月16日

[]Set#join

rubyのSetはArrayみたくjoinってないんやー。。残念!

・・・と思ったら、こんな風に出来た。

set = Set.new
set << "hello" << "world"

puts set.to_a.join(", ")  # hello, world

2010年04月13日

[]文字のバイト列の表示

文字コードを勉強するにあたって、バイト表現が簡単に分かった方が便利だったので。

もう何度も同じようなのを作っているんだけど、改めて。

def print(str, cs)
  str.encode(cs).each_char do |c|
    puts "#{c} : #{c.bytes.map{|b| b.to_s(16).upcase}.join(' ')}"
  end
end

こんなふうに使うと、、

print("あアA", "Shift_JIS")

こんな表示になります。

あ : 82 A0

ア : B1

A : 41


そうそう、rubyはサロゲートペア文字もなんのその。ちゃんと文字の長さは1文字って表示されます♪