2009-11-28
■ [正規表現]先読み

(?= )
先読み(lookahead)。パターンによる位置指定(幅を持たない)
正規表現
先読み、戻り読みは位置に対してマッチする。
puts "/(?=Jeffrey)Jeff/ =~ 'by Jeffrey fried1': #{/(?=Jeffrey)Jeff/ =~ 'by Jeffrey fried1'}" puts "/(?=Jeffrey)Jeff/ =~ 'by Tomas Jefferson': #{/(?=Jeffrey)Jeff/ =~ 'Tomas Jefferson'}"
/(?=Jeffrey)Jeff/ =~ 'by Jeffrey fried1': 3 /(?=Jeffrey)Jeff/ =~ 'by Tomas Jefferson':
■ [正規表現]戻り読み

(戻り読み(lookbehind)は Oniguruma *7が必要)
正規表現
ということで、1.9だと動作します。
ret = "its Jeffs pen.".gsub(/(?<=\sJeff)(?=s\s)/, "'") puts "'its Jeffs pen.'.gsub(/(?<=\sJeff)(?=s\s)/, \"'\"): #{ret}" ret = "its Jeffs pen.".gsub(/(?<!\sJeff)(?!s\s)/, "'") puts "'its Jeffs pen.'.gsub(/(?<!\\sJeff)(?!s\\s)/, \"'\"): #{ret}"
'its Jeffs pen.'.gsub(/(?<=\sJeff)(?=s\s)/, "'"): its Jeff's pen. 'its Jeffs pen.'.gsub(/(?<!\sJeff)(?!s\s)/, "'"): 'i'ts' 'J'e'f'fs' 'p'e'n'.'
本当は「\s」ではなく「\b」で動かしたかったんだけど、うまく動作させることができなかった。
コメントを書く