nDiki : 正規表現
Related term
2002年1月11日 (金)
■ 12:45 続URI Reference を Parsing する正規表現

- [ WiKicker ] 自動InterWiki (2004-02-09)
- [ WiKicker ] URI抽出正規表現修正 (2004-07-24)
- Perl v5.8.8 の CGI.pm の PATH_INFO 処理の問... (2006-07-08)
- URI のパスセグメントの中の = (2005-04-21)
- 今日のさえずり - フィルムカメラがあったところに天体望遠鏡が鎮座 (2008-11-10)
2004年2月3日 (火)
■ [WiKicker] WiKicker の文字化け対応

WiKicker の文字化けであるが Perl v5.6.x という環境が怪しそう。 ということで、ローカルに Perl v5.6.2 を入れてテスト。
tar zxvf perl-5.6.2.tar.gz cd perl-5.6.2 rm -f config.sh Policy.sh sh Configure -de -Dprefix=/usr/local/perl-5.6.2 make make test make install
で /usr/local/perl-5.6.2/bin/perl -MCPAN -e shell でもりもり必要なモジュールをインストール。
で WiKicker のテスト。化けた。 追いかけてみると、Locale::Maketext モジュールが use utf-8 をしているため、l10n した文字列は UTF-8 として mark されてしまっているようだ*1。 で、mark されていない他の部分の(バイト列としてのUTF-8)文字列と結合したりしたところで化けたと。
ということで、Perl v5.6.x では maketext で帰ってきた文字列の UTF-8 mark を外すようにする。
if (5.006 <= $] && $] < 5.7) {
return eval "no utf8; my \$tmp = \$language_handle->maketext(\@param); \$tmp =~ /^(.*)\$/; \$1";
}
という緊急処置コード。 Perl 5.0005_03 では utf8 プラグマ自体が無いので、eval の中に入れておく。 v5.6.x での UTF-8 mark の外し方が良くわからないので、とりあえず正規表現に全マッチさせるというダサいコード(v5.8 だと utf8::* にそこら辺の関数があるのだが)。
*1Perl 5.6.x では Perl v5.8.x のように "UTF8" flag という呼び名はないのかな?
- YAML Perl モジュール (2004-05-19)
- 野良パッケージと依存 Perl モジュールのインストールセット をCPAN... (2006-02-11)
- 野良パッケージと依存 Perl モジュールのインストールセット を CPA... (2006-02-12)
- Rubric でプライベート SBS を立てるも 0.140 では日本語に不具合 (2006-07-22)
- DBD::Oracle 1.16 を Debian GNU/Linux s... (2005-05-19)
2004年2月5日 (木)
■ はてなダイアリーキーワード自動リンクAPI

はてなダイアリー外のアプリケーションにおいて、はてなダイアリー内と同じく、キーワードの自動リンクを可能とするためのAPIを試験公開しました。
APIというか、 キーワードリスト (正確にはキーワードのどれかにマッチするPerl正規表現)を取得できるようになっただけとも言える。 '|' で結ばれた巨大な正規表現なので、ある意味富豪的。 普通に使うと最左最長でのキーワード抽出に使える。 ちなみにWiKickerは非最左最長でのキーワード抽出。
しかしそれでもキーワードリストを取得できるっていうのは、ふとっぱらとも言える。 貴重なデータですよ。
- [ WiKicker ] 自動InterWiki (2004-02-09)
- Cache::Memcached 1.13 の Perl 5.005_03 対応 (2004-06-05)
- 他の Web サイトの情報を URI::Fetch でキャッシュ付き取得 (2005-10-29)
- [WiKicker] WiKicker の文字化け対応 (2004-02-03)
- [ Perl ] Memcached を使ってみる (2004-01-12)
2004年2月9日 (月)
■ [ WiKicker ] 自動InterWiki

一昨日実装した、 複数のキーワード集合による、AutomaticLinkモジュールを WiKicker CGI プログラムから使えるようにしてみた。
ローカルにおいておいたキーワードリストファイルを読み込み AutomaticLink 処理(WikiForum 内で AutomaticLink でマッチしていない部分文字列に対して)。 マッチした場合は InterWiki を使ってURIに変換しリンク化する。
あわせてIndexPage.txtでWiKicker WikiForum 内の PageName を取得できるようにした。
これで例えば、2つの WiKicker WikiForum が cron で互いの IndexPage.txt を定期的に取得し、AutomaticLink するようにすれば、相補的に連携する事ができるようになる(ただし AutomaticLink のみ。WikiName や BracketName は依然としてその WikiForum 内のみ)。
AutomaticLink でのリンク先は(指定した)任意の InterWiki で定義できるので、あるキーワード集合について Google の検索結果ページや「はてなダイアリーキーワード」への自動リンクも実現可能(はてなダイアリーキーワード自動リンクAPIはキーワードリストではなく正規表現を返してくるので、元に戻す必要有り。またあれだけ巨大なキーワードリストだと毎回 AutomaticLink のために、trie 再生成するのも辛いのでもう一工夫必要)。
- [ WiKicker ] 複数のキーワード集合による、AutomaticLink (2004-02-07)
- [ WiKicker ] 憧れのサイドバー (2004-01-23)
- Windows 上での Apache 2.0.53 では PATH_INF... (2005-04-10)
- はてなダイアリーキーワード自動リンクAPI (2004-02-05)
- [ WiKicker ] 「最近のアクセスログ」処理思案 (2004-01-17)
2004年2月10日 (火)
■ [ WiKicker ] WiKicker へ脚注機能追加

WiKicker スタイルで日記を記述するにあたり欠けている機能として「脚注」がある。 Wiki としては必須でないので WiKicker には導入していないのだが、日記としては無いと困る。 脚注が使えると文を書く時に正直手を抜ける。 また hns 上の旧記事をコンバートする時にも無いといろいろ面倒だし。
ということで実装。
@ インラインブロック
さてどうしたものか。 WiKicker の WRI (BracketName 等を含む識別子)としての実装なら、parser の変更もなく新しいWRI scheme の追加と対応するクラスを書くだけですむ。 しかし WRI は終端記号なので、そうすると脚注の中でWRIを使えなくなる。 それは困る。
ということで、やはり非終端記号が必要。 悩んだあげく、
{{scheme: ... }}
という「インラインブロック非終端記号」を導入。 {{..}} というのは確かいくつかの WikiEngine でプラグイン呼び出しで使っている記法だったような。
- 一般的な文章中には現れず、
- かといって文章中に混ぜてもそれほど違和感なく(wiki ではこれが重要)
- これ以上文法を追加したくないので、今後機能追加の際に利用できるように scheme 指定できる
といった点から、このようにしてみた。 2番目の点で合格点の出せる記法かどうかは微妙だが、まぁ許せる範囲かな。
{{ }} は、1行中に現れる必要有り。 「...」は scheme specific part だが、今のところ scheme によらず、InlineParser で解析されて部分木になるため、WRI とか ... とかも書ける。 InlineParser では正規表現を使っていて括弧の数は数えないので、今のところ {{ }} の中に {{ }} は書けないが、まぁ問題ないでしょう。
@ 脚注記法
で脚注は、
{{fn: ...}}
となる。 普通。
@ 実装
- InlineParser の拡張
- InlineBlockNode クラスの追加
- 各 Visitor に visit_InlineBlockNode を追加。
- HtmlFragmentVisitor に fn: の処理を追加。
いざ実装してみると、ちょこっとのコードで実現。 脚注番号の降り方とか、今後改良する点はあるけど、大枠は完成。
- Wikiの文法の標準化 (2004-02-10)
- [ WiKicker ] hell mode - HTMLタグ付けブロックの導入 (2005-09-13)
- 無制限 HTML タグ付けブロックを使って nDiki に Google ... (2007-08-23)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
- キックオフミーティング2日目 (2004-10-26)
2004年3月12日 (金)
■ [ お仕事 ] 久しぶりに TeX打ち

受けとった MS Word ファイルを LaTeX2e に。
ヘッダ・フッタとかもアレンジする。 一時期はかなりTeXのマクロで遊んだのだが(数値計算してそのままプロットとか、有限オートマトン定義を正規表現に展開するとか)、すっかり忘れてしまっている。
- 久しぶりに TeX (LaTeX2e) のマクロ書き (2004-07-13)
- Docutils の reStructuredText から LaTeX ... (2005-12-07)
- プロジェクト関連ドキュメントを TeX で (2004-07-23)
- [ お仕事 ] Word による文書書き (2004-02-16)
- 結局自分も MOLESKINE に行き着くのか (2005-12-15)
2004年5月19日 (水)
■ YAML Perl モジュール

データファイルをYAMLで扱おうと思い、YAML Perl モジュール (0.35)でちょこちょこと実験。
@ 日本語がことごとく quote される。
ある UTF-8 で書かれたファイルを読み込んで YAMLで Dump したら、日本語の部分がことごとく quote される。 これはいただけない。
my $ESCAPE_CHAR = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f]';
で判別している。手抜きではないか。 さてどうしたものか。
と考えていたら、よく考えたら Perl v5.8.x だとバイト単位ではなく文字単位で正規表現マッチングさせられるんだったことを思い出した。 手抜きだなんて思って失礼しました。
データファイルを読んで utf8::decode してから YAML で Dump するようにしたらクオートされなくなった。Good.
Perl v5.6 系だとどうすればいいんだろ。 YAML.pm を直接書き換えて
use utf8;
を追加すれば期待通りにはなるのだが、ちょっと嫌だな。
@ sequence をインラインで
短い sequence は
- a - b - c
ではなく
[a, b, c]
の形式で出して欲しい。YAML.pm のチェックしたところ
my $y = YAML->new; $y->InlineSeries(5); print $y->dump($data);
のようにインラインにしてよい上限の個数を指定すればよいことを知る。
[ UTF8 フラグ ]
- [WiKicker] WiKicker の文字化け対応 (2004-02-03)
- [ WiKicker ] hell mode - HTMLタグ付けブロックの導入 (2005-09-13)
- YAML Perl モジュール と Perl v5.6 (2004-05-20)
- Template Toolkit で UTF-8 なファイルを INCLU... (2004-10-29)
- Skype for Linux 1.0.0.1 (2005-02-02)
2004年7月24日 (土)
■ [ WiKicker ] URI抽出正規表現修正

- Perl v5.8.8 の CGI.pm の PATH_INFO 処理の問... (2006-07-08)
- [ WiKicker ] 自動InterWiki (2004-02-09)
- WiKicker 0.27 リリース (2005-10-05)
- [ WiKicker ]If-Modified-Since: 関連バグ (2003-10-02)
- はてなダイアリーキーワード自動リンクAPI (2004-02-05)
2004年12月13日 (月)
■ [ WiKicker ] 書き込みをパターンでチェック

ここ最近 link popularity アップを狙った、悪質な書き込みが NaneyOrgWiki で増えている。 気がついたら早めに削除して、IP アドレス指定のアクセス制限をかけるようにしているが、アクセス制限の方は連続的な荒らしをさけるための気休めでしかない。
やはりパターンベースで書き込みをはじくように WiKicker に手を加えた。
- 設定ファイルで無視パターンリストファイルを指定できるように。
- 無視パターンリストファイルでは、文字列または正規表現を指定可能。
- 書き込みがあった時にこのファイルを読み込み、パターンマッチング。
- マッチしたら書き込みを無視。
機能自体はすぐ実装できた。
後は、これもいたちごっこではあるが順次パターンを追加していくか。
Wiki は特性上、修正も再書き込み。 すでにある書き込み部分に無視パターンにマッチしてしまう文字列があると、追記でもコミットが無視されるという普通の人には不可解に感じる動作になる(パターンにマッチしている部分を探し出して消さないといけない)。 要注意。
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
- [ WiKicker ] 古くても検索キャッシュを返す (2004-01-20)
- [ WiKicker ] WiKicker へ脚注機能追加 (2004-02-10)
- [ WiKicker ] SpeedyCGI 対応するも…… (2003-11-09)
- mixiに登録 (2004-11-19)
2005年10月1日 (土)
■ mixipress でコミュニティ掲示板もチェック

この週末 mixi で遊びのついでに mixipress も試してみることにした。
mixipress はPerlで書かれたCGI プログラムで、アクセスするとmixi にログインして「最新のマイミクシィの日記・参加しているコミュニティのBBSへの投稿・以前コメントした日記・日記へのコメント・メッセージ・足あとのダイジェスト」を含むRSSを返してくれる。
ローカルの Apache に mixipress 0.31 をインストール。 0.31 が出た後、 mixi 側で URL の変更があったのでそれに対応するように一部正規表現を修正。
で Sage でアクセス。 ふむふむ、これだと面倒で見ていなかった掲示板のチェックも楽だ。
- Debian に RSS リーダ「フレッシュリーダー」をインストール (2006-03-06)
- m4s tkh再会新年会 (2005-01-06)
- mixi のプロフィールをランダム更新 (2005-09-30)
- [ 日記 ] SpeedyCGI による、同時処理数制御 (2004-01-20)
- 今日のさえずり - 「はてなMobileGateway」かましてから、OK... (2008-01-03)
スポンサード リンク
■よく検索されるキーワード
perl(62) torrent(54) linux(48) 提案書(47) windows(43) 書き方(41) 使い方(29) アジェンダ(26) x31(25) 充電式カイロ(25) cvs(22) インストール(20) サンプル(20) thinkpad(19) アジェンダとは(19) f-01a(18) wiki(17) c#(16) 感想(16) カイロ(16) usb(16) java(16) 秋葉原(15) debian(15) ヨドバシカメラ(15) subversion(15) 壁紙(15) 作り方(15) 静電気(14) apache(14) グッズ(14) デロンギ(13) フリー(13) sh-01a(13) ganttproject(13) 修理(13) ssh(12) svn(12) ヨドバシ(12) truecrypt(12) ダイソー(11) 手帳(11) activeperl(11) ubuntu(11) ほぼ日手帳(11) firefox(10) mew(10) mp980(10) ドラマ(10) 日本語(10) n-01a(10) google(10) tc-1(10) 評判(10) ツール(10) djunit(9) cgi(9) 動画(9) mp3(9) オイルヒーター(9) docomo(9) rcs(9) 除去(9) centos(9) メモリ(9) エネループ(9) 設定(9) p-01a(9) tortoisesvn(9) 無印(8) ケース(8) 口コミ(8) ミノルタ(8) メール(8) インストーラ(8) 会議(8) xampp(8) 加湿器(8) af(7) 値段(7)■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザインProcess Time: 15.07547s / load averages: 0.21, 0.27, 0.33
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)



スポンサード リンク