memo.xight.org

日々のメモ

カテゴリ : 正規表現

1ページ目 / 全1ページ

RegExLib.com - Regular Expression Library

Summary

正規表現ライブラリ.

http://www.regexlib.com/Search.aspx?k=キーワード
で正規表現を検索可能.

Reference

Regular Expression Library -- presented by ASPSmith.com Training
http://www.regexlib.com/

via

にぽたん研究所 - 2005-03-29 - 本邦初公開!電話番号の正規表現
http://blog.livedoor.jp/nipotan/archives/17526053.html

正規表現のエスケープ

Summary

  vi 上で正規表現を扱う場合に,エスケープしなければならない文字,エスケープしてはならない文字.
| + 要エスケープ
^ $ . * エスケープ不要
( ) 両方エスケープが必要
{ } 初めだけエスケープが必要
[ ] エスケープ不要
- 追記
  C/Migemo を使用する際,呼び出したせ域表現をそのまま使用できないので,調べていたら発見.
  C/Migemo では --vim オプションを使用すればOKらしい.

$ /usr/local/bin/cmigemo --vim --dict /usr/local/share/migemo/euc-jp/migemo-dict --word キーワード

- Reference
  Stray Penguin - Linux Memo (vi)
  http://www.asahi-net.or.jp/~aa4t-nngk/vi.html#search

安否を気遣う正規表現

中越地震の安否を気遣うメッセージより

((ご?無事|大丈夫)ですか(。|、|)|心配((してい?ます|です)(。|、|)|なので(、|))|(落ち着い|電話が通じ)たら)?((至急)?(お?電話|メール)を?下さい|連絡を?(下さい|待(ち|ってい)ます))。

  これにマッチしないようなメッセージのほうが勇気付けられると思う.

「安否を気遣うメッセージ」ランキング (対象 1000件)

70件 心配しています。連絡ください。
30件 連絡ください
19件 心配しています。連絡下さい。
18件 連絡ください。
17件 落ち着いたら連絡ください
17件 心配しています連絡ください
12件 心配してます。連絡ください。
11件 落ち着いたら連絡ください。
11件 心配です。連絡ください。
9件 大丈夫ですか。連絡ください。

「こんなメッセージは勇気付けられるだろうな」と思ったメッセージ

おば様大丈夫ですか。心配しています。


Reference

  NHK - 10/23新潟県中越地震 NHK安否情報検索
  http://www3.nhk.or.jp/anpi/pc/

正規表現ネタ

三銃士 (アトス,ポルトス,アラミス)

  ((ア(ト|ラミ))|ポルト)ス
  ((ア|ポル)ト|アラミ)ス

Windowsのバージョン

  Windows (95|98( Second Edition)?|Me|NT (Workstation|Server)|2000 (Professional|Server)|XP (Professional|(Home|Media Center|Tablet PC|64-bit) Edition))

納得したとき

  (ふむ){2}

痛いとき

  い(た|て)+

via

  はてなダイアリー - 髪は老害にして…。 - 2004-03-28
  http://d.hatena.ne.jp/ryouen/20040328#p3

Unicode の Property を利用した正規表現

\p{Han}

  漢字にマッチ

\p{Hiragana}

  ひらがなにマッチ

\p{Katakana}

  カタカナにマッチ

Reference

  perl5.8のUnicodeサポート
  http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl_unicode.html
  module.jp - 日本語に絡むUnicodeブロックとスクリプト (正規表現)
  http://module.jp/blog/regex_unicode_prop.html
  Script と実際のコードポイントとの対応表
  http://www.unicode.org/Public/UNIDATA/Scripts.txt

正規表現デスクトップリファレンス

Summary

  O'Reilly から出版されている「 本: 詳説 正規表現 」を元に書かれている.
Amazon - 本: 正規表現デスクトップリファレンスAmazon - 本: 詳説 正規表現

Reference

本: 正規表現デスクトップリファレンス
本: 詳説 正規表現
  O'Reilly Japan - Catalog - 正規表現デスクトップリファレンス
  http://www.oreilly.co.jp/BOOK/regexpr/

正規表現 (Stringクラス)

前提

  置換対象文字列 : str

マッチング

boolean flag = str.matches("正規表現");


置換

String result = str.replaceFirst("正規表現","置換文字列");
String result = str.replaceAll("正規表現","置換文字列");


分割

String[] strs = str.split("正規表現");

正規表現 (Pattern, Matcherクラス)

マッチング

boolean flag = Pattern.matches("正規表現","文字列");


置換

Pattern p = Pattern.compile("正規表現");
Matcher m = p.matcher("置換対象文字列");
String result = m.replaceFirst("置換文字列");
String result = m.replaceAll("置換文字列");


分割

Pattern p = Pattern.compile("正規表現");
String[] strs = p.split("置換対象文字列");


注意

import java.util.regex.*;

  を忘れずに

Reference

  JavaAPI Documents - Pattern (Java 2 プラットフォーム SE v1.4.0)
  http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/regex/Pattern.html
  JavaでHello World 正規表現編
  http://www.hellohiro.com/regex.htm

Perlメモ

Summary

  やりたい事から逆引きできる.正規表現雑技が物凄い.

http URIの正規表現

q{\b(?:https?|shttp)://(?:(?:[-_.!~*'()a-zA-Z0-9;:&=+$,]|%[0-9A-Fa-f} .
q{][0-9A-Fa-f])*@)?(?:(?:[a-zA-Z0-9](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.)} .
q{*[a-zA-Z](?:[-a-zA-Z0-9]*[a-zA-Z0-9])?\.?|[0-9]+\.[0-9]+\.[0-9]+\.} .
q{[0-9]+)(?::[0-9]*)?(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f]} .
q{[0-9A-Fa-f])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-} .
q{Fa-f])*)*(?:/(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f} .
q{])*(?:;(?:[-_.!~*'()a-zA-Z0-9:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*)*)} .
q{*)?(?:\?(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])} .
q{*)?(?:#(?:[-_.!~*'()a-zA-Z0-9;/?:@&=+$,]|%[0-9A-Fa-f][0-9A-Fa-f])*} .
q{)?};

正確でないが簡単なhttp URIの正規表現

s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+


CSV形式の $line から値を取り出して @values に入れる

  (値1,値2,"値3,値3","値4""値4" → 値1 値2 値3,値3 値4"値4)
{
	my $tmp = $line;
	$tmp =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/;
	@values = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_}
	($tmp =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g);
}


配列 @array から重複した要素を取り除く

{
	my %count;
	@array = grep(!$count{$_}++, @array);
}


特定の項目でソートする (第 1項でソートし,さらに第 2項で降順ソートする)

@data = ('A,7,緑',
	 'C,6,青',
	 'B,4,赤',
	 'A,9,紫',
	 'A,2,黄緑',
	 'B,10,黄',
	 'C,3,青紫');
@data = map {$_->[0]}
sort {$a->[1] cmp $b->[1] or $b->[2] <=> $a->[2]}
map {[$_, split /,/]} @data;


  - ソート後のデータ
@data = ('A,9,紫',
	 'A,7,緑',
	 'A,2,黄緑',
	 'B,10,黄',
	 'B,4,赤',
	 'C,6,青',
	 'C,3,青紫');


Reference

  大崎 博基 - Perlメモ
  http://www.din.or.jp/~ohzaki/perl.htm

正規表現で変数を用いる際の注意点

問題点

  $hoge = 'hoge' という変数があった場合
  huga を ahogea と置換するために
  s/huga/a$hogea/;
  とやっても,$hogeaという変数と解釈してしまう.
  s/huga/a($hoge)a/;
  とやっても,a(hoge)aとなってしまう.

解決法

  s/huga/a${hoge}a/;
  ${変数名} は Perl だけでなく,Shellスクリプトなどでも応用が利くらしい.