ひけつ(秘訣)

ホームページのトップに戻る目次 このページのリンク以外の部分でダブルクリックすると、目次が現れます

正規表現の事例
 ・検索の事例
 ・置換の事例

Outlook の予定表に 2008 年以降の祝日を追加

部品表MRPシステムで、KIT品番で手配しても構成品番で在庫管理する方法

よい人間関係をつくるヒント
人生を攻略する法則

正規表現の事例(サンプル)

 コンピュータの特長の一つに、強力なデータ検索が有ります。ここでは、文字データの検索に有効な、「正規表現」の事例を紹介します。

 正規表現は、perlなどの言語や、エディタなどで微妙に表現の違いが有ります。その文法や解説は、既に優れたホームページがたくさん有るので、そちらを参照下さい。
  1. 正規表現HOWTO
    http://www.python.jp/Zope/articles/tips/regex_howto/
  2. Perlの小部屋
    http://www.komonet.ne.jp/~perl/
  3. bmonkey's page
    http://homepage1.nifty.com/bmonkey/delphi/delphi.html
  4. Baba Centerfolds
    http://www.hi-ho.ne.jp/babaq/bregexp.html
    サクラエディタに同梱されている、馬場さんのPerl5(最短マッチが使用できるの)互換の正規表現のホームページです。
    サクラエディタのヘルプの「正規表現ライブラリについて」の項にも紹介されています。
  5. 正規表現の対照表(国語の先生の為の正規表現)
    http://homepage2.nifty.com/zaco/rexp/rexpt.html
  6. Perl正規表現雑技
    http://www.din.or.jp/~ohzaki/regex.htm
  7. サルにもわかる正規表現入門
    http://www.mnet.ne.jp/~nakama/
  8. 正規表現の入門
    http://codezine.jp/article/detail/3246
  9. 正規表現のサンプル集
    http://hodade.adam.ne.jp/seiki/
 

正規表現を用いた検索の事例

 正規表現の文法では、. * ? + ( ) { } [ ] ^ $ \ | がメタ文字で、これ以外のすべての文字はリテラルです。
 メタ文字は、エスケープキャラクタ \ が前に付くとリテラル(その文字そのもの)になります。
 メタ文字はキャラクタクラス指定の中では (\を前に置かなくても自動的に)その特殊な意味を失って、その文字自身を表わします。

metalanguage:ある言語を分析・記述するのに用いる高次の言語[記号]体系
literal:文字[字義]どおりの; 言葉本来の意味の.

事例正規表現解説
Grep または grep[Gg]rep[]は、キャラクタクラスと言い、ブラケット(角括弧)で囲んだ文字のいずれかひとつとマッチすればマッチしたと判断
英単語[a-zA-Z][a-zA-Z]*[](ブラケット)の中に「-」(マイナス)があれば、範囲指定を意味する
[亜-K] は、漢字にマッチ
[ァ-ヶ] 全角カタカナにマッチ
[ぁ-ん] 全角ひらがなにマッチ
* は、直前文字の0回以上の繰り返し

注:範囲指定は、文字コードの小さい方と大きい方で挟んで指定します。 以下のような範囲指定ができそうですが、文字コードがバラバラなので、個別に指定する必要があります。
[一-九]はダメで、[〇一ニ三二四五六七八九十]とします。(当然、どんな順に書いてもかまいません。(^^ゞ
[月-日]もダメで、[月火水木金土日]とします。
漢数字の、文字コード上の位置
英文行^((?![、-K]).)*$(?!パターン) は、ゼロ幅の否定的な先読み表現。
変数名や関数名[a-zA-Z0-9_-]+
または\w+
+ は、直前のパターンの1回以上の繰り返し
\wは、半角の英数文字とアンダースコア(_下線)を示す、文字クラス エスケープ シーケンス(特殊変数)
変数名や関数名\b[a-zA-Z0-9]+\b\bは、単語の境界(2バイト文字に対応していないので注意)
+ は、直前のパターンの1回以上の繰り返し
メイルアドレス[A-Za-z0-9_-]+@[A-Za-z0-9.]+
2004/4/17 の形式の日付[0-9]{4}/[0-9]{1,2}
/[0-9]{1,2}
ブレース{n}で直前のパターンをn回繰り返し、
{n,}だとn回以上、
{m,n}で m回以上、n回以下にマッチ
[0-9]は、特殊変数 \dでも良い
郵便番号
123-1234
([0-9]{3})-([0-9]{4})()は、パターンのグループ化。
グループ化した部分の優先順位が高くなるので、
パーレン(まる括弧)の中を評価した後に全体を評価します。
パーレンの中のパターンがバッファに保存できるので、置換に用います
空白行^$
または^\n
または^\r
(ファイルの改行指定方法で異なる)
^ カレットは、文字列(行)の最初に、
$ は、文字列(行)の最後にマッチする。
\nは、ニューライン = LF(\x0a) 改行(ラインフィード)
\r:リターン = CR(\x0d) 改行(キャリッジリターン)
スペースを含む空白行^\s*$\s:スペース文字 = 半角スペース(\x20) , タブ文字(水平タブ(\x09),垂直タブ(\x0b)) , 改行(CR(\x0d),LF(\x0a)) , 改ページ(\x0c)
\S:スペース文字以外
10文字の行^.{10}$. 改行文字以外の任意の1文字
指定した文字数以上の行
ここでは、10文字以上の行
^.{10,}$. 改行文字以外の任意の1文字
{n,}だとn回以上
test または TESTtest|TEST| は、パターンの論理和で、複数のパターンのいずれか
メイルの宛先やタイトル^(To|From|Subject
|Date|Cc|Bcc|Fcc|
Received|Sender):
^ 文字列(行)の最初にマッチする。
This is a desk.
This is a book.
のisのマッチ
最長マッチ .*is
最短マッチ .*?is
単語単位は
\b.[^ ]*?is|is
.* は何でも有りを示す。
通常は最長一致のルールが適用される。
? で最短でマッチ。
\b 単語の境界にマッチする。
前後の単語を指定した検索
例:
「情報」と「検索」
情報.*?検索.* は何でも有りを示す。
? で最短でマッチ
メイルの引用部分^ *\>.*$^ 文字列(行)の最初にマッチする。
閉じている
ダブルクォーテーション文字列
"("|.[^"]*")
または
".*?"
\でエスケープされない[と、\でエスケープされない]で囲まれた最初の^は否定
行頭が数字でない行^[^0-9].*ブラケット(角括弧)中の初めの^は否定
,と,の間が12桁の部分,[^,]{12},途中の^は否定
ダブルクォーテーション
から行末まで
".[^"]*$$ 文字列(行)の最後にマッチする。
()でくくられた範囲。
3重の入れ子を含む。

単純に \(.*?\) で、下記ような文字列を検索すると、黄色の部分にマッチしてしまうので、注意!

(京都(きょうと)に行く)

右のHTMLタグ入れ子検索の正規表現および解説は、
サクラエディタ掲示板の「すい」さんの記述から引用させていただきました

注:テキストの括弧の数が、正しく入れ子になっていないと、ループします。
\([^()]*
(\([^()]*
(\([^()]*[^()]*\)[^()]*)*
[^()]*\)[^()]*)*
[^()]*\)
HTMLのタグの入れ子への対応方法
↓基本パターン
<[^<>]*>

これで対応するタグ(括弧)だけにマッチします。
入れ子に対応するための準備として
<[^<>]*[^<>]*>
と変更します。(まだ入れ子非対応。)

で、↑上記の [^<>]* と [^<>]* の間に
(<[^<>]*[^<>]*>[^<>]*)*
という、「( 対応する括弧の組み合わせ+括弧とは無関係な 0字以上の文字列 )が 0回以上繰り返される」
の記述を挿入。↓

<[^<>]*(<[^<>]*[^<>]*>[^<>]*)*[^<>]*>

↑これで2重の括弧に対応。

さらに↑上記の [^<>]* と [^<>]* の間に
(<[^<>]*[^<>]*>[^<>]*)*
という、「( 対応する括弧の組み合わせ+括弧とは無関係な 0字以上の文字列 )が 0回以上繰り返される」の記述を挿入。↓

<[^<>]*(<[^<>]*(<[^<>]*[^<>]*>[^<>]*)*[^<>]*>[^<>]*)*[^<>]*>

↑これで3重の括弧に対応。
↓4重入れ子まで対応

<[^<>]*(<[^<>]*(<[^<>]*(<[^<>]*[^<>]*>[^<>]*)*[^<>]*>[^<>]*)*[^<>]*>[^<>]*)*[^<>]*>
10182
11128
20080
30020
90180
で80で終わらない行
^.*([^8].|[^0])$^ 文字列(行)の最初にマッチする。
$ 文字列(行)の最後にマッチする。
htmlのタグ<(.*?)>* は、直前文字の0回以上の繰り返し
.*は何でも有りを示す。
? で最短でマッチ。
htmlのアンカータグ<[Aa] [^>]*>
cssのコメント /* *//\*/?([^/]|[^*]/|\n)*\*/
行頭以外の特定文字
(ここでは■)
(トーリスさんに教えていただきました)
(?!^)■.*(?!パターン) は、ゼロ幅の否定的な先読み表現。
サクラエディタで使えます。
指定した文字で始まらない行
(ここでは、行頭が 追加 ではない行)
^(?!追加).*$
指定した文字を含まない行
(ここでは 変更 を含まない行)
^((?!変更).)*$
指定した文字で終わらない行
(ここでは、行末が 変更 ではない行)
^.*(?!変更)..$先読み否定を使う場合は、同幅で有幅の表現を置く必要があります。
行末が$でうまく行かない場合は、$の代わりに\r\nを使います。
(注:左記は、2文字以下の行にはマッチしません。
普通のperl互換の正規表現では、 m/.*(?!変更)$/ が一般的です。)
 この項目の全ては、 (全略) さんに教えていただいたものです。
^.*(?<!変更)$bregonig.dll など、否定の戻り読みが使える場合。
行末が$でうまく行かない場合は、\r\nを使います。
^.*[^変][^更]$行末が$でうまく行かない場合は、\r\nを使います。
 しみづ さんに教えていただきました。
指定した文字を含む行
(ここでは 変更 を含む行)
.*変更.*$
英数記号の連続10桁以上で終わる行
(例えば、下のような行
ABCD    123 CUDR-U.MULKO
EFGHIJK 25  BLOCK->HANTAI)
^.* [a-zA-Z0-9<>\.\(\)/-]{10,}$[](ブラケット)の中で、文字として「-」(ハイフン)を指定したい場合は、最後に持ってくる
全角文字[^ -~。-゚]
または、[^\x01-\x7E]
半角文字以外
"の数が、一行中に19個ある行^"(.*?"){18}$CSVを Access にインポートしたとき、
"の数が合わなくてエラーになった
下図参照
該当行が、前もって分かっているときは、
カーソルを近くの行まで持っていってから検索しないと、時間がかかります(^^ゞ
事例正規表現解説
CSVを Access にインポートしたとき、"の数が合わなくてエラーになった


正規表現を用いた置換の事例

 perl正規表現では()、grep正規表現では\(...\)でバッファに保存して、$n または \nで保存したパターンを呼び出します。
 何万行もの「大きいファイル」の置換は、xyzzyPeggyPad が得意です。

事例正規表現解説
1番目、2番目、3番目を
NO.1、NO.2、NO.3に
(\d+)番目
/NO.\1
\dは数字
+ は、直前のパターンの1回以上の繰り返し
ローマ字の名・姓を、姓・名に
Makoto WATANABE
→WATANABE Makoto
^([a-zA-Z]+) +([a-zA-Z]+)
/\2 \1

「10/20'2004」を
「2004/10/20」に
([0-9]{1,2})/([0-9]{1,2})'([0-9]{4})
/\3/\1/\2
[0-9]は\dでも良い
「2004/04/17」を
「2004年04月17日」に
([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})
/\1年\2月\3日
[0-9]は\dでも良い
「12.345.12」を
「12345.12」に
欧州では、
数字の3桁区切りに、
「,」ではなく「.」を使う。
これを削除。
(\d{1,3})\.(\d{3})\.(\d\d)
/\1\2.\3
\. は、リテラルとしての「.」
「プリンタ」を
「プリンター」に
プリンタ([^ー])
/プリンター\1
^ は、「含まれていない場合」と言う否定的な指定
「ー」以外の次の1文字まで選択しておいて、置換するテクニック
行末が「>」でない行に
「<br>」を追加
([^>])\r\n
/\1<br>\r\n
^ は、「含まれていない場合」と言う否定的な指定
前行と同じテクニック
行末が「,」でない行に
「,」を追加
^(.*[^,])$
/\1,
^ は、「含まれていない場合」と言う否定的な指定
一行丸ごとつかんで、変換する方法
シングルクォーテーション
で括られた5桁以上の数値から
シングルクォーテンションを外す
'(\d{5,})'/$1バッファ呼び出しは、$1でもできる
指定した文字数で改行
ここでは、40文字で改行
(.{40})/\1\n\1 で指定文字数のバッファを書き出して、
改行文字 \n を追加
htmlのタグ消去<!--(.|\n)*-->|<([^>]|\n)*>
空白行の削除^\n/
step1.「\r\n/\n」
step2.「^\n+/」
step3.「\n/\r\n」
テキストエディタに付属している整形機能や、クリップボード・ツールを使ったほうが便利
指定した文字を含む行を削除
(ここでは 変更 を含む行)
.*変更.*\n/さくらエディタの じゅうじ さんの掲示から、無断引用
日本語の削除
英日対訳から日本語部分を削除
[、-K]
「行頭以外の特定文字(ここでは■)」から行末までの削除
(げんたさんと、もかさんに教えていただきました)
(.)■.*
/\1\r
または、
^(.[^■]*)■.*
/\1\r
特定文字の左側を、別にバッファに入れて、書き戻すテクニックです。
置換後の\rは行末までの指定で\r\nの\rも食べられてしまう場合に入れます
日本語文字列+半角空白+英語
の「半角空白」で改行
([亜-Kァ-ヶぁ-ん)\]〉]) ([a-zA-Z].*)$
/$1\r\n$2
字幕データで、1セルに複数単語が入っているものを、分割して、単語リストにするために使っています
キャラクタクラス指定の中では \を前に置かなくても、その文字自身を表わします。
事例正規表現解説

注:サクラエディタBBSに、\1と$1の違いについて、すい さんが書かれた以下の掲示が有ったので、無断転載させていただきます。
 perl では、
----------
◎ \1,\2,\3,...
 正規表現の中では () にマッチした箇所を後方参照する。
◎ $1,$2,$3,...
 正規表現の中で () にマッチした箇所を、正規表現の外で参照する。

正規表現の中:検索文字列そのものの事。
正規表現の外:検索文字列の他の場所。置換後文字列もこちら。
----------
と、なっています。
そして「正規表現の外」では \<数値> には他の機能が与えられています。

perl 以外のユーティリティでは、検索文字列中でも置換後文字列中でもどちらでも、 () などにマッチした箇所を \1,\2,\3,... で参照するようになっている物が多いため、perl でも置換後文字列中では あまり違和感が無いように \1,\2,\3,... でも極力それっぽく動くように作られてはいますが、それは perl としては あくまで特例扱いの処置だし、
(検索文字列以外では本来 \<数値> には他の機能があるし)
常に期待通りに動くとは限らないそうです。

perl の世界では置換後文字列中で \1,\2,\3,... は使うべきではない、
\1,\2,\3,... を使うのは悪癖である、$1,$2,$3,... を使うべき
と されています。

注:EmEditor は、$1 が使えなくて、\1 のみです。また改行は、\r\n ではなく、\n です。


この種類の目次に戻る↑ トップページに戻る


Outlook の予定表に 2008 年以降の祝日を追加

 私は、スケジュール管理に、Outlook を使っています。
 ところが、来年の予定を入れようとしてびっくり。国民の祝日のデータが、入っていません。

 Microsoft のサポート・サイトを調べましたが、有りません。
 Microsoftとは、お客様の満足を考えず、無理やり新商品を売ることしか考えていない、ひどい会社だと思います。
 そこで、ググってみたら有りました。

 下記のサイトで、「Outlook の予定表に 2008 年以降の祝日を追加するスクリプト」を掲載していただいていました。

 Outlook 研究所
http://outlooklab.spaces.live.com/

 コピーして、 AddHoliday.vbs という名前で保存し、実行するだけで、Outlook 2000、Outlook 2002 や、Outlook 2003 に、2008 年以降の祝日データを追加できます。

この種類の目次に戻る↑ トップページに戻る


部品表MRPシステムで、KIT品番で手配しても構成品番で在庫管理する方法

 複数の品目を集めてKITにした品目番号でまとめ発注しながら、調達後は、構成子品番で個別に在庫管理したい場合が有ります。
 部品表を下記の様に作成します。
親品番┬KIT品番─KITダミー品番(数量マイナス1) ┬構成子部品
   │                   ├構成子部品
   │                   ├構成子部品
   │                   
   └KITダミー品番 ┬構成子部品
           ├構成子部品
           ├構成子部品

 KIT品番が入庫すると、KITダミー品番(数量マイナス1)が自動払出しされるので、構成子部品の在庫が立ちます。親品番の生産完了実績を登録すると下側の構成子部品が払出されるので、構成子部品の在庫は消えます。
 あなたの使っているERPが、マイナス数量を登録できるものなら、試して見て下さい。


この種類の目次に戻る↑ トップページに戻る



よい人間関係をつくるヒント

 社会生活をする上で、人間関係をうまくすることは、たいせつです。
 親子関係や夫婦関係、お友だちとの関係でも、うまく行かない?、と感じることがあったら、人間関係を、客観的に捕らえる技術として、心理学を少し知っておくと、役に立つかもしれません。

 右の、「自分を活かす生き方・殺す生き方 - 適応の心理」は、マンガ(力富書房:リキトミコミックス:心理学入門シリーズ 5)ですが、人間関係が難しいと思ったときに、適応のしかたを見直すことで、ムリをせずに自分らしく生きる生き方を見つけ出して行く過程が、分りやすく書かれています。
 飯田耕一郎 のロリコン風の絵も、私のお気に入りで、時々読み返しています。
 古い本ですが、Amazon なら、これを書いている時点で、まだ入手できます。
 新刊時の倍の値段で流通していることからも、人気がうかがえます。



 良かれと思ってやっていても、自分の行動が、必ずしも、あらゆる状況にフィットしているわけでは有りません。
 心の問題とか、生まれながらの性格だとか悩まないで、心理学≒技術の知識を少し習得することで、対処の仕方について整理ができて、きっと元気が出るでしょう。

 「交流分析 TA(Transaction Analysis)」も、参考になるでしょう。

 TAの概論:交流分析 日本TA協会(TAAJ)
http://www.taaj.gr.jp/outline.html

 下記で紹介されている本は、Amazonで買うことができます。
http://www.iryo.co.jp/ta-net/HON.vs

Amazon.co.jp のロゴ サーチ
する:
 1,500円以上の注文なら、配送料無料です。



 説得術・交渉術も、「技術」「知識」として知っておいて、日常心がけると、状況が変わってくると思います。

 読書ノート 『説得力』
http://www.din.or.jp/~honda/tokio14f.htm

 頑固な相手も心を開く「共感型」説得術
http://www.president.co.jp/pre/20030714/002.html

 相手が進んで従う「納得」の交渉術
http://www.president.co.jp/pre/20060814/004.html

 交渉に負けない心理トーク術
http://www.jobclick.jp/static/mg/051107_06.html
http://web.archive.org/web/20070511000645/http://www.jobclick.jp/static/mg/051107_06.html

 ネゴシエート交渉術
http://www.keepnetwork.com/contents/nego01.html



 Wellness Recovery Action Plan(WRAP:元気回復行動プラン)
と言うものも有ります。


この種類の目次に戻る↑ トップページに戻る



人生を攻略する法則

 下記サイトがよくまとまっています。知識として知っておくと、何かのときに役に立ちます。

http://www.okyakusan.com/

この種類の目次に戻る↑ トップページに戻る


ホームページのトップに戻る










inserted by FC2 system