つれづれ日記
ぶいよんブイロク?
GA | GW | G | A / amL | S | つれづれ日記 RSS: RDF Site Summary
最新 | 2010年 8月 7月 6月 5月 4月 3月 | もっと前 [ 携帯版 | IPv6版 ]
この日記はよしいまいち コメント

JavaScriptの正規表現のmatch()とexec()での/gの違い

JavaScriptの正規表現のmatch()とexec()での/gの違い 。 一つの文字列から複数のパターンを取り出して繰り返し処理を するときはwhile(m = myRegexp.exec(myString)) { ... }とする。

オライリーの正規表現本を書店で見たところ、Perl/Python/JavaScriptなどの 各言語での表現例がそろっていてわかりやすかった。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2010年04月21日(水)| あめ | 12/15 | カテゴリ: Software Web JavaScript Regex

経産省のスクレイピングは、日が変わってコンテンツが 変わるたびに手直しが必要

経産省のスクレイピングは、日が変わってコンテンツが 変わるたびに手直しが必要 。総務省と警察庁はHTMLの構造が簡単で 変化がなかったので簡単だったが。経産省の場合は"001"から"005"まで、 新着情報として表示するコンテンツの種類が分かれている。 そのうち、一部のコンテンツがない日は"003 none"のように指定が 変更になる。

div の body-tab0 内は「注目情報」、div の doby-tab1内に div class="001"から div class="005"までがある。body-tab2は 「お知らせ」という文字があるが、使われていないらしいが、 よくわからない。

まず、ごみであるdiv id="00[1-5]" noneのdivブロックを削除する ことにした。また、div id="field-title"のタグを最後の 区切りになるようにした。HTMLコメント文の<!-- /Tabs -->は なぜか正規表現でひっかからなくなっていた。/ は \ で エスケープしたのだが。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2010年04月20日(火)| くもり | 7/11 | カテゴリ: Web Software Regex

経産省のWebの「注目情報」と「報道発表」のあたり、 見出しに「~の発表」とか「~の公表」などとあり、ムダ

経産省のWebの「注目情報」と「報道発表」のあたり、 見出しに「~の発表」とか「~の公表」などとあり、ムダ 。 Webの「注目情報」に表示するのだから発表そのものではないのか? 経産省の新着情報のガジェットで、経産省だけ追加で 以下のようにタイトルを編集した。

  $title        =~ s/
        (について|を|の)        #
        (発表|掲載|公表)        #
        (いた)?(しました)?。?   # しました いたしました しました。
        ( \( [^)]* \) )? \s*    # 末尾の ( .... )
        $/
	/x;			# 正規表現内に空白文字を入れてよい

上の正規表現による文字列の削除で、「の発表」とか「について公表しました」 とか「を掲載いたしました。」などの文字列を削除している。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2010年04月13日(火)| はれ | 5/9 | カテゴリ: Regex 政府 Web

数字にカンマを入れる、Perl正規表現での文字列置き換え

数字にカンマを入れる、Perl正規表現での文字列置き換え 。

1 while $numeric =~ s/(\d)(\d\d\d)(?!\d)/$1,$2/g;

(sub, Comma, comma, perl, regex)

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2010年04月06日(火)| はれ | 5/5 | カテゴリ: Perl Regex

よく見たらTeraTermのヘルプに'RE'という セクションがあって、やたら詳しい正規表現一覧が書いてあった 。 ちょっと確認したいときに使えそう。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2009年02月08日(日)| はれ | 1/2 | カテゴリ: Software Regex

正規表現の構文を色分けブロック、フロー表示するstrfriend

正規表現の構文を色分けブロック、フロー表示するstrfriend

strfriendを作ろうとすると、正規表現がスタック型の言語に見えてくる。

最初、"strfriend" という、誰かのブックマーク名だけ見たときは、 てっきり「友達リストを一発で返すAPI」かと思った。

strfriendがイケてないのは、改行やタブ、空白文字で整形した 正規表現記述 //x に対応していないこと。

関連: 正規表現実装の 処理方式の違いを説明するアニメーション

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年12月04日(木)| はれ | 3/6 | カテゴリ: Regex

UTF-8 の正規表現についての情報は "Unicode 正規表現" で 調べたほうがわかりやすそう 。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年12月04日(木)| はれ | 2/6 | カテゴリ: Regex

iGoogleのガジェットとして扱われるデータが、 改行なしの理由がわかった

iGoogleのガジェットとして扱われるデータが、 改行なしの理由がわかった 。JavaScriptの正規表現(RegExp)では、 //sオプションがないため、改行があると、最初の改行から先の 文字列は一切操作できないから。ただのデータ量削減のためでは なかった。
  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年10月15日(水)| くもり | 2/3 | カテゴリ: Regex Software Web

上のような、「漢字の羅列の抽出」も、 PerlのUTF-8対応正規表現だと簡単にできる

上のような、「漢字の羅列の抽出」も、 PerlのUTF-8対応正規表現だと簡単にできる 。

/(?: [^\p{Han}]+ (\p{Han}+) )+ /x

[^\p{Han}]+は、漢字ではない文字の1文字以上の羅列。 \p{Han}+は、漢字(\p{Han})の1文字以上の羅列(+)だ。 後半の(\p{Han}+)の括弧のくくりで、この範囲の 文字列を、正規表現のキャプチャ文字列として返す。 さらに大きな外側の (?: ... ) 括弧では、このカッコ内が 繰り返しパターンとして(+)照合する形になっている。 ここで、+の特徴として、最後に照合して合致した文字列だけを 返すので、最後の漢字の羅列が取り出せる。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年10月08日(水)| あめ | 7/7 | カテゴリ: Perl Regex

正規表現の機能の覚書き (2008/9/23)は (?=...) とか (?!...)の 使い方もあってよい

正規表現の機能の覚書き (2008/9/23)は (?=...) とか (?!...)の 使い方もあってよい 。その他、Longest Match の話もあり。
  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年09月28日(日)| くもり | 8/9 | カテゴリ: Regex

日ごろ不思議に思っていることを書いてみる- 04.10.5 正規表現の先頭にある $ マークは

日ごろ不思議に思っていることを書いてみる - 04.10.5 正規表現の先頭にある $ マークは ?

/$\d+\.txt$/

とあるのは、正規表現の最後に /ms オプションがついていればよさそうな気もしたが、

/$\d+\.txt$/ms

やはり正規表現最初の文字が ^ でないと、マッチしない。

/^\d+\.txt$/ms

これなら、マッチする

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年09月28日(日)| くもり | 5/9 | カテゴリ: Perl Regex

"man perlre" でGoogle検索したら自分の日記が 先頭候補になってしまった 。げげ。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年09月28日(日)| くもり | 4/9 | カテゴリ: Perl Regex

Perlのコメント文入りの正規表現内では、 コメント文内で / を使うと文法エラーまたは divided by 0

Perlのコメント文入りの正規表現内では、 コメント文内で / を使うと文法エラーまたは divided by 0 。

Perlの正規表現で、/x オプションを指定すると、正規表現内の スペース、タブ、改行は無視され、自由にスペースを入れたり 改行したり、インデントして記述でき、たいへんわかりやすい。 また、# に続けてコメント文も記述でき、これまたたいへん わかりやすい正規表現コーディングが可能になる。

が、正規表現内のコメント文内に / が現れると、 文法エラーになったり、0除算例外になったりするので注意。

0除算例外になる例:

% perl -e '$a="abc";$a=~/(b) #/co
/x;'
  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年09月28日(日)| くもり | 3/9 | カテゴリ: Perl Regex

Fedora 9 の httpd 2.2.9 で、 httpd の access_log の末尾に 2 つの数字が追加されていた

Fedora 9 の httpd 2.2.9 で、 httpd の access_log の末尾に 2 つの数字が追加されていた 。 httpd の集計スクリプトが動かないので確認してみたら、 そういうことで正規表現を変える必要があった。 ログファイルの正規表現って、標準的につけてもらいたいような気が。 末尾までがちがちに正規表現を書いちゃった自分も悪いのだけれど。
  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年09月20日(土)| はれ | 8/14 | カテゴリ: Web Software Fedora 9 Regex

Perlのuse utf8;tr [A-Za-z0-9] [A-Za-z0-9];できる 。 感動。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年09月20日(土)| はれ | 1/14 | カテゴリ: Perl Regex

正規表現のグループ (...)+を使って 同一パターンの繰り返しを全部キャプチャしようとしたけれど よくわからず

正規表現のグループ (...)+ を使って 同一パターンの繰り返しを全部キャプチャしようとしたけれど よくわからず 。split() した。しかし、split() はたくさんの 配列を変えさせると重くなる。かといって小さな split() を 繰り返すと、トータルではもっと遅くなる。
  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年09月15日(月)| くもり | 4/8 | カテゴリ: Perl Regex

Perl 5.10 の Perl 正規表現の \K について

Perl 5.10 の Perl 正規表現の \K について 。 「このあとの文字列削除 (kill)」みたいな意味なんだろうけれども、 いまいち直観的でないような。もう、かなり言語化してしまって いるので、\{KillAfterHere}とかでいいんじゃない だろうか。man perlreには Keep the left of this operator とあった。$& とかの変数に保管することなく、Keepする ので、コストが低いですよ、ということか。

この一文字オペレータはどこか来た道。あ、sendmail.cf か。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年09月15日(月)| くもり | 2/8 | カテゴリ: Perl Regex

Perlでは、改行を含む文字列の行頭、行末に ^, $でマッチしたいときは /mを使う

Perlでは、改行を含む文字列の行頭、行末に ^, $でマッチしたいときは /m を使う 。
  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年09月14日(日)| くもり | 1/6 | カテゴリ: Regex Perl

Perl の encoding を使うと、UTF-8 の正規表現が異常に 遅いので、ようやく自分の日記環境も、2008年分から全部 UTF-8 にした

Perl の encoding を使うと、UTF-8 の正規表現が異常に 遅いので、ようやく自分の日記環境も、2008年分から全部 UTF-8 にした 。 binmode(FD, ":encoding(euc-jp)")にしなければ、 正規表現の検索も遅くならない。

UTF-8 での正規表現は日本語でもかなり自由に書けるようになった。

/ ( .+? ) ( [。?] ) /sx;
が通る。何か、。でも?でもない文字列の連続 (.+?) と、。か? ([。?]) が取り出せる。基本的なことなのだけれども、UTF-8 正規表現ができるまでは jperl やら Jcode やらを使って、別の命令か何かを使わないと 処理できなかった。そういう意味でも日本語でもプログラムは簡単になった。
  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年05月04日(日)| はれ | 3/9 | カテゴリ: Perl Regex

PerlのUTF-8の環境で encoding 指定したあと、 /regex/i で何秒もかかることがある

PerlのUTF-8の環境で encoding 指定したあと、 /regex/i で何秒もかかることがある 。 漢字かな混じり、先月の日記、EUC-JP の 96KB のファイルを Perl 5.8.8 (Fedora 7) で $_ に読み込んで 10回、a または A を b に置き換えると、a だけを b に置き換えるよりも 17秒長くかかる。/i なしだと 0.25秒程度が、/i ありだと 17 秒以上。
% time perl -e '
use utf8; \
use encoding "utf-8"; \
open(I,"200804file.html"); \
binmode(I, ":encoding(euc-jp)"); \
undef($/); \
<I>; \
for($n=0;$n<100000;$n++){$_ = s/a/b/isg;}'

ただの検索 /a/i; にしても、やはり長時間がかかる。

もともと UTF-8 のファイルを読み込んで、/a/i で検索すれば、 /i ありでも /i なしの 50% 増し程度の時間で完了するので、 use encoding の問題らしい。 かかる処理時間も、10万回の /a/i で 0.3秒。

  • Twitter
  • はてなブックマークに追加
  • Google
  • Yahooブックマーク
  • Facebook
| 2008年05月04日(日)| はれ | 2/9 | カテゴリ: Regex Perl
Regexカテゴリ
1ページ >>

お便りはこちらへ (sshida@gmail.com)
見出し一覧は RSS で つれづれ日記 RSS: RDF Site Summary