ラベル 正規表現 の投稿を表示しています。 すべての投稿を表示
ラベル 正規表現 の投稿を表示しています。 すべての投稿を表示

2019年5月10日金曜日

令和数式を置換してくれる自作関数

ポイントは正規表現のReplaceで、パターン化して一致されたセルの番地を更にReplaceに使ったこと。「$1」を使って一個目のマッチングを引用すること。
Option Explicit
Public Const REIWA = "IF(_CELL_>=DATE(2019,5,1),""令和""&IF(YEAR(_CELL_)-2018=1,""元"",YEAR(_CELL_)-2018)&""年""&MONTH(_CELL_)&""月""&DAY(_CELL_)&""日"",TEXT(_CELL_,""ggge年m月d日""))"
Function reiwa_switch(strFormual, strCellAddr As String) As String

Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")
With reg
    .Pattern = "TEXT\((" & strCellAddr & "),""ggge年m月d日""\)"
    .IgnoreCase = False
    .Global = True
End With
reiwa_switch = reg.Replace(strFormual, Replace(REIWA, "_CELL_", "$1"))
End Function

=reiwa_switch(A1,A2)→関数


TEXT(data!FU3,"ggge年m月d日")→第一引数(A1)
data!FU3→第二引数(A2)
IF(data!FU3>=DATE(2019,5,1),"令和"&IF(YEAR(data!FU3)-2018=1,"元",YEAR(data!FU3)-2018)&"年"&MONTH(data!FU3)&"月"&DAY(data!FU3)&"日",TEXT(data!FU3,"ggge年m月d日"))→結果

2014年2月23日日曜日

正規表現のパターンにヒットするファイルをmv

結論から

普通の正規表現
先頭不一致は「^」と「?!」で行けるはずが、egrepはなぜか癖がある?
例えば「先頭DELが付いていない」の正規表現は'^(?!DEL).*'ですが、egrepだと
'^[^(!DEL)].*'になります。

ls /home/from/ | egrep '^[^(DEL)][0-9]{6}.*(US)$' | xargs -I{} mv {} /home/to/

意味は"/home/from"の下のファイルやフォルダを対象に、先頭が"DEL"以外、数字6桁の次に
任意の長さの文字列が続き、最後"US"で終わるモノを全て"/home/to"に移動する

勉強:
ファイル名のみ縦表示する
#ls -1

すごくお世話になった正規表現チェッカー
http://regexpal.com/

egrepで先頭不一致(パターン)の正規表現
サンプルでは先頭が"DEL"以外すべてヒットする書き方
egrep '^[^(DEL)].*'
egrep
構文
egrep [オプション] [正規表現パターン] ファイル名

-i 検索する際、大文字小文字を区別しない
-n マッチした行の行番号も表示する。
-c マッチした行数を出力する。
-v マッチしない行を出力する。
-[数値] マッチした行の前後[数値]行も出力する。
-A [数値] マッチした行の後[数値]行も出力する。
-B [数値] マッチした行の前[数値]行も出力する。

以下正規表現
※「」は正規表現ではなく、パターン文字列を囲む記号です。
「.」→ 任意の一文字
「*」→ 0回以上の繰り返し

「.*」→ 任意文字列、空文字列もOK

「^」→ 行頭マッチ
「$」→ 行末マッチ

「^#.*t$」→ #から始め、tで終わる任意の長さの文字列
"#this is a comment" → ◯
"#this is a title" → ×
"this is not a comment" → ×

「[ABC]」→ A,B,Cのいずれか
「[A-Z]」→ A~Zの範囲いずれか

^[A~Za-z0-9]*$ → 文字列がすべて大文字と小文字と数字のモノがヒット
「\w」→ 英数字
「\W」→ 英数字以外
「\d」→ 数字
「\D」→ 数字以外
「\s」→ スペース
「\S」→ スペース以外

ですから
「^[A~Za-z0-9]*$」 と 「\w*$」 は同じ効果

"abcdefg1234" → ◯
"abc defg1234" → ×

「(abc)」→ "ABC"というフレーズがヒットする
「[^(ABC)]」→ "ABC"フレーズを含まない
「[^ABC]」→ ABCいずれでもない
「[^A-Z]」→ A~Zの範囲いずれでもない

"^(DEL).*" → 先頭が"DEL"なっている文字列
"^(?!DEL).*" → 先頭が"DEL"なっていない文字列

「{n}」→ n回の繰り返し

「^\d{8}.*」→ 8桁数字から始める文字列すべて
"20140102ABCDEFG123" → ◯


「{n},」→ n回以上の繰り返し
「{n,m}」→ n回以上m回以下の繰り返し
「p1|p2」→ 正規表現p1かp2のいずれか

「^(FR|CN).*(US)$」→ "FR"または"CN"で始め、"US"で終わる全ての文字列

2014年1月23日木曜日

行頭から特定の文字までを置換する正規表現

下記、行頭から「#」までを削除したい場合。

例えば:
t_gyoumu.toshi_keikakukuiki IS NULL OR #都市計画区域
t_gyoumu.bouka_chiiki IS NULL OR #防火地域
t_gyoumu.shikichi_menseki_goukei IS NULL OR #敷地面積合計
t_gyoumu.youto_chiiki1 IS NULL OR #用途地域1
t_gyoumu.shuyou_youto IS NULL OR #主要用途
t_gyoumu.kouji_shubetsu IS NULL OR #工事種別
t_gyoumu.kounchiku_menseki_gk IS NULL OR #建築面積合計
t_gyoumu.zentai_nobe_menseki_ss IS NULL OR #全体延べ面積申請部分
t_gyoumu.zentai_nobe_menseki_gk IS NULL OR #全体延べ面積合計
t_gyoumu.yousekitiasho_nobe_menseki IS NULL #容積対象延べ面積

検索(正規表現):
^.+\#

置換(空文字列)

結果:
都市計画区域
防火地域
敷地面積合計
用途地域1
主要用途
工事種別
建築面積合計
全体延べ面積申請部分
全体延べ面積合計
容積対象延べ面積

おまけ:
online 正規表現ツール

2013年5月14日火曜日

2010年12月2日木曜日

IE8ではimgタグのalt属性をツールチップで表示されない

IE8ではなぜかimgタグのalt属性をツールチップで表示されない、IE7はできるのに。
仕方なく、altの代わりにtitle属性を追加しましょう。

秀丸で一括置換しましょう。viewフォルダーの中で(サブフォルダーも含め)、すべてのファイルに対して、置換を掛けました(SubVersionを使っているので、.svnフォルダが邪魔するなら、一回exportしましょう、exportされたフォルダーに置換かけたら、元のフォルダーを上書きしましょう)

Rubyで生成するタグを含めて、すべて4パタンを置換しなければなりません:

パタン1:(Rubyで生成するタグ、ダブルコーテーション)
検索する文字列:
:alt => "([^¥"]+)",
置換する文字列:
:alt => "¥1", :title => "¥1",

パタン2:(Rubyで生成するタグ、シンクルコーテーション)
検索する文字列:
:alt => '([^¥']+)',
置換する文字列:
:alt => '¥1', :title => '¥1',

パタン3:(一般HTMLタグ、シンクルコーテーション)
検索する文字列:
alt='([^¥']+)'
置換する文字列:
alt='¥1' title='¥1'

パタン4:(一般HTMLタグ、ダブルコーテーション)
検索する文字列:
alt="([^¥"]+)"
置換する文字列:
alt="¥1" title="¥1"