トップ(最新) | 次>

nDiki : 正規表現

正規表現 - regular expression

関連情報

ライブラリ

  • PCRE
  • 鬼車
    • 正規表現オブジェクトごとに異なる文字エンコーディングできる。

その他

  • POSIX
  • 有限オートマトン
  • 正則言語

スポンサード リンク

Related term

2002年1月11日 (金)

12:45 続URI Reference を Parsing する正規表現 このエントリーを含むはてなブックマーク

前の続き大崎 博基 さんの perlメモ

スポンサード リンク


[ 1月11日全て ]

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 という呼び名はないのかな?


[ 2月3日全て ]

2004年2月5日 (木)

はてなダイアリーキーワード自動リンクAPI このエントリーを含むはてなブックマーク

はてなダイアリー外のアプリケーションにおいて、はてなダイアリー内と同じく、キーワードの自動リンクを可能とするためのAPIを試験公開しました。

APIというか、 キーワードリスト (正確にはキーワードのどれかにマッチするPerl正規表現)を取得できるようになっただけとも言える。 '|' で結ばれた巨大な正規表現なので、ある意味富豪的。 普通に使うと最左最長でのキーワード抽出に使える。 ちなみにWiKickerは非最左最長でのキーワード抽出。

しかしそれでもキーワードリストを取得できるっていうのは、ふとっぱらとも言える。 貴重なデータですよ。


[ 2月5日全て ]

2004年2月9日 (月)

[ WiKicker ] 自動InterWiki このエントリーを含むはてなブックマーク

一昨日実装した、 複数のキーワード集合による、AutomaticLinkモジュールを WiKicker CGI プログラムから使えるようにしてみた。

ローカルにおいておいたキーワードリストファイルを読み込み AutomaticLink 処理(WikiForum 内で AutomaticLink でマッチしていない部分文字列に対して)。 マッチした場合は InterWiki を使ってURIに変換しリンク化する。

あわせてIndexPage.txtWiKicker WikiForum 内の PageName を取得できるようにした。

これで例えば、2つの WiKicker WikiForumcron で互いの IndexPage.txt を定期的に取得し、AutomaticLink するようにすれば、相補的に連携する事ができるようになる(ただし AutomaticLink のみ。WikiNameBracketName は依然としてその WikiForum 内のみ)。

AutomaticLink でのリンク先は(指定した)任意の InterWiki で定義できるので、あるキーワード集合について Google検索結果ページや「はてなダイアリーキーワード」への自動リンクも実現可能(はてなダイアリーキーワード自動リンクAPIはキーワードリストではなく正規表現を返してくるので、元に戻す必要有り。またあれだけ巨大なキーワードリストだと毎回 AutomaticLink のために、trie 再生成するのも辛いのでもう一工夫必要)。


[ 2月9日全て ]

2004年2月10日 (火)

[ WiKicker ] WiKicker脚注機能追加 このエントリーを含むはてなブックマーク

WiKicker スタイルで日記を記述するにあたり欠けている機能として「脚注」がある。 Wiki としては必須でないので WiKicker には導入していないのだが、日記としては無いと困る。 脚注が使えると文を書く時に正直手を抜ける。 また hns 上の旧記事をコンバートする時にも無いといろいろ面倒だし。

ということで実装。

@ インラインブロック

さてどうしたものか。 WiKickerWRI (BracketName 等を含む識別子)としての実装なら、parser の変更もなく新しいWRI scheme の追加と対応するクラスを書くだけですむ。 しかし WRI は終端記号なので、そうすると脚注の中でWRIを使えなくなる。 それは困る。

ということで、やはり非終端記号が必要。 悩んだあげく、

 {{scheme: ... }}

という「インラインブロック非終端記号」を導入。 {{..}} というのは確かいくつかの WikiEngineプラグイン呼び出しで使っている記法だったような。

  • 一般的な文章中には現れず、
  • かといって文章中に混ぜてもそれほど違和感なく(wiki ではこれが重要)
  • これ以上文法を追加したくないので、今後機能追加の際に利用できるように scheme 指定できる

といった点から、このようにしてみた。 2番目の点で合格点の出せる記法かどうかは微妙だが、まぁ許せる範囲かな。

{{ }} は、1行中に現れる必要有り。 「...」は scheme specific part だが、今のところ scheme によらず、InlineParser で解析されて部分木になるため、WRI とか ... とかも書ける。 InlineParser では正規表現を使っていて括弧の数は数えないので、今のところ {{ }} の中に {{ }} は書けないが、まぁ問題ないでしょう。

@ 脚注記法

脚注は、

 {{fn: ...}}

となる。 普通。

@ 実装

いざ実装してみると、ちょこっとのコードで実現。 脚注番号の降り方とか、今後改良する点はあるけど、大枠は完成。


[ 2月10日全て ]

2004年3月12日 (金)

[ お仕事 ] 久しぶりに TeX打ち このエントリーを含むはてなブックマーク

受けとった MS Word ファイルを LaTeX2e に。

ヘッダ・フッタとかもアレンジする。 一時期はかなりTeXのマクロで遊んだのだが(数値計算してそのままプロットとか、有限オートマトン定義を正規表現に展開するとか)、すっかり忘れてしまっている。


[ 3月12日全て ]

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 フラグ ]


[ 5月19日全て ]

2004年7月24日 (土)

[ 7月24日全て ]

2004年12月13日 (月)

[ WiKicker ] 書き込みをパターンでチェック このエントリーを含むはてなブックマーク

ここ最近 link popularity アップを狙った、悪質な書き込みが NaneyOrgWiki で増えている。 気がついたら早めに削除して、IP アドレス指定のアクセス制限をかけるようにしているが、アクセス制限の方は連続的な荒らしをさけるための気休めでしかない。

やはりパターンベースで書き込みをはじくように WiKicker に手を加えた。

  • 設定ファイルで無視パターンリストファイルを指定できるように。
  • 無視パターンリストファイルでは、文字列または正規表現を指定可能。
  • 書き込みがあった時にこのファイルを読み込み、パターンマッチング
  • マッチしたら書き込みを無視。

機能自体はすぐ実装できた。

後は、これもいたちごっこではあるが順次パターンを追加していくか。

Wiki は特性上、修正も再書き込み。 すでにある書き込み部分に無視パターンにマッチしてしまう文字列があると、追記でもコミットが無視されるという普通の人には不可解に感じる動作になる(パターンにマッチしている部分を探し出して消さないといけない)。 要注意。


[ 12月13日全て ]

2005年10月1日 (土)

mixipressコミュニティ掲示板もチェック このエントリーを含むはてなブックマーク

この週末 mixi で遊びのついでに mixipress も試してみることにした。

mixipressPerlで書かれたCGI プログラムで、アクセスするとmixi にログインして「最新のマイミクシィ日記・参加しているコミュニティのBBSへの投稿・以前コメントした日記日記へのコメント・メッセージ・足あとのダイジェスト」を含むRSSを返してくれる。

ローカルの Apachemixipress 0.31 をインストール。 0.31 が出た後、 mixi 側で URL の変更があったのでそれに対応するように一部正規表現を修正。

Sage でアクセス。 ふむふむ、これだと面倒で見ていなかった掲示板のチェックも楽だ。


[ 10月1日全て ]

スポンサード リンク

■よく検索されるキーワード

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)

この日記のはてなブックマーク数 Add to Google RSS

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)