概要
状態:-
閲覧数:9,143
投稿日:2011-01-29
更新日:2016-11-08
任意の文字列の中から、開始語と終了語を指定して、文字列を抜き出す
例
・任意の文字列/hoge/piyo/puyo/pipipi.html任意の文字列
やりたいこと
・/hoge/で始まり、.htmlで終わる文字列を抜き出したい
正規表現
. ピリオド
・改行を除く任意の一文字を表す
* アスタリスク
・直前の文字列やメタ文字の「0回以上の繰り返し」を表す
? クエスチョン
・直前の文字列やメタ文字の「0回もしくは1回の出現」を表す
・最短一致記号
※使われる場所によって、意味が異なる
.*
・限りなく連続した文字を表す
.+
・限りなく連続した文字を表す
最短一致と最長一致
・標準では最長一致が適用されるので、最短一致をしたい場合には、 明示的に指示する必要がある
*?
・0回以上のくり返し(最短一致)
*
・0回以上のくり返し(最長一致)
○○.*?△△
・ここでの?の意味は、○○で始まり、△△で終わる文字列の最短一致
例
・任意の文字列/hoge/piyo/puyo/pipipi.html任意の文字列
やりたいこと
・/hoge/で始まり、.htmlで終わる文字列を抜き出したい
正規表現
/hoge/.*?\.html
解説
. ピリオド
・改行を除く任意の一文字を表す
* アスタリスク
・直前の文字列やメタ文字の「0回以上の繰り返し」を表す
? クエスチョン
・直前の文字列やメタ文字の「0回もしくは1回の出現」を表す
・最短一致記号
※使われる場所によって、意味が異なる
.*
・限りなく連続した文字を表す
.+
・限りなく連続した文字を表す
短長
最短一致と最長一致
・標準では最長一致が適用されるので、最短一致をしたい場合には、 明示的に指示する必要がある
*?
・0回以上のくり返し(最短一致)
*
・0回以上のくり返し(最長一致)
○○.*?△△
・ここでの?の意味は、○○で始まり、△△で終わる文字列の最短一致
事例集
^\n
空行検索
^\n
改行だけの空行を削除
・置換ダイアログ使用
・「検索→置換」の「検索」エディットボックスに「^\n」、「置換」エディットボックスに「」(空白にする)、「正規表現」チェックボックスをONにして全置換実行
^#\n
行頭#で後に何もない行を検索
^#\n
^.+分前
行頭**分前で後に何もない行を検索
^.+分前\n
.+?
先頭半角空白ないバージョン
.+?
^Twitter -
行頭Twitter -
^Twitter -
^ [^ ]+
行頭に半角スペースが1個あり、半角スペース以外の文字が1個以上続き、半角スペースがその次に来る
^ [^ ]+
閉じる$
行末文字列が「閉じる」
・「閉じる」3文字だけを検索選択
閉じる$
.*閉じる$
行末文字列が「閉じる」
・行末が「閉じる」を検索し、該当行全体を選択
.*閉じる$
0+.+.+(?=jpg)
0で始まるjpg
0+.+.+(?=jpg)
・(1回以上の0)+(任意の文字を任意の回数)+(最後がjpg)
・この方法では、実際には400.jpgなども検索される
-webkit.*?\n
行頭が-webkitで開始する行を削除
・置換前
-webkit.*?\n
・置換後
置換後は何も指定しない
・削除後、行を詰める
・改行も削除
-webkit.*?$
行頭が-webkitで開始する行内容を削除
・置換前
-webkit.*?$
・置換後
置換後は何も指定しない
・削除後、行は詰めない
・改行を削除しないので、空白行となる
その他
改行絡みでうまくいかない場合は、次の一文字も含めるとうまくいく場合がある
・検索
"
・置換
"
Twitter関連
(-| Fri, 11 Mar 2011).+?(Read it on Twitter)
\n・
.+?
・
$ .+?
正規表現での検索結果を置換先で使用 … ()キャプチャする括弧
検索
「★で始まり SoftBank,」で終わる文字列の最短マッチ検出
★.*? SoftBank,
検出結果
★AQUOS CRYSTAL X SoftBank,
★シンプルスマホ2 SoftBank,
★Xperia Z3 SoftBank,
問題点
・マッチした内容を記憶していないので、置換する際、使用できない
置換
キャプチャする括弧利用
・マッチした内容を記憶
※()は置換する時点ではなく、検索する際に付与
「★で始まり SoftBank,」で終わる文字列の最短マッチ検出。マッチした内容を記憶
★(.*?) SoftBank,
検出結果
・検出結果自体は、()を使用しない場合と同一
★AQUOS CRYSTAL X SoftBank,
★シンプルスマホ2 SoftBank,
★Xperia Z3 SoftBank,
マッチした内容を記憶すると何が嬉しいの?
・置換する際、効力を発揮
事例1
「★で始まり SoftBank,」で終わる文字列の、 SoftBankだけを削除したい
・元データ
文字列★AQUOS CRYSTAL X SoftBank,文字列SoftBank
文字列★シンプルスマホ2 SoftBank,文字列SoftBank
文字列★Xperia Z3 SoftBank,文字列SoftBank
キャプチャ指定した上で検索
★(.*?) SoftBank,
置換
★\1,
結果
文字列★AQUOS CRYSTAL X,文字列SoftBank
文字列★シンプルスマホ2,文字列SoftBank
文字列★Xperia Z3,文字列SoftBank
・秀丸で、正規表現キャプチャを利用して、置換をしたい
事例2
対象
<a href="/rule/read.cgi/ishimarugenshow/1264351368/">SPEED スピード</a>
<a href="/rule/read.cgi/kageyamatamio/1280005865/">YOU'VE GOT A FRIEND/トラブル・バスター2</a>
検索
<a href="/rule/read.cgi/.*?">(.*?)</a>
置換
\1
改行絡みでどうしてもうまくいかないとき
「指定文字列から始まらない一行」を検索
「指定文字列から始まる一行」を検索
キャプチャ / 検索する側で()。置換する側で\1,\2。$1,$2ではないため注意が必要
CSV。列の一部を正規表現で取得して、隣の列へコピー
CSVのn列目のデータ区切りまで選択
CSVのn列目のデータ区切りまで
^([^,]*,){n}
CSVの2列目のデータ区切りまで
^([^,]*,){2}
メーカー,機種名,販売時期,キャリア,OS種類,最大待受時間,CPU,CPUコア数,ROM(GB),RAM(GB),インターフェース,外部メモリタイプ,外部メモリ最大容量,バッテリー容量(mAh),幅(mm),高さ(mm),厚み(mm),重量(g),画面サイズ(インチ),画面解像度,パネル種類,データ通信サービス,Bluetooth,赤外線通信機能,テザリング対応,NFC対応,LTE対応,無線LAN規格,背面カメラ画素数,前面カメラ画素数,手ブレ補正,撮影用フラッシュ,4K撮影対応,耐水・防水機能,HDMI端子,フルセグ,ワンセグ,GPS機能,MHL対応,ハイレゾ,おサイフケータイ/FeliCa,認証機能,デュアルSIM,デュアルSIMデュアルスタンバイ(DSDS),SIM情報,発売日,,,,
シャープ,007SH KT, ,SoftBank,Android 2.3,3G:300時間,Snapdragon S2 MSM8255, ,1,, ,microSDHCメモリーカード, , ,51.8x113x19.3,,,140,3.4,854x480,NewモバイルASV液晶,3Gハイスピード,Bluetooth 3.0,○, , , , ,1610万画素, ,○, , , , , ,○,○, , ,おサイフケータイ, , , ,SIMロック解除不可 (標準SIM),2011年 9月9日 ,,,,
シャープ,007SH KT, ,SoftBank,Android 2.3,3G:300時間,Snapdragon S2 MSM8255, ,1,, ,microSDHCメモリーカード, , ,51.8x113x19.3,,,140,3.4,854x480,NewモバイルASV液晶,3Gハイスピード,Bluetooth 3.0,○, , , , ,1610万画素, ,○, , , , , ,○,○, , ,おサイフケータイ, , , ,SIMロック解除不可 (標準SIM),2011年 9月9日 ,,,,
CSVの15列目のデータ区切りまで
^([^,]*,){15}
メーカー,機種名,販売時期,キャリア,OS種類,最大待受時間,CPU,CPUコア数,ROM(GB),RAM(GB),インターフェース,外部メモリタイプ,外部メモリ最大容量,バッテリー容量(mAh),幅(mm),高さ(mm),厚み(mm),重量(g),画面サイズ(インチ),画面解像度,パネル種類,データ通信サービス,Bluetooth,赤外線通信機能,テザリング対応,NFC対応,LTE対応,無線LAN規格,背面カメラ画素数,前面カメラ画素数,手ブレ補正,撮影用フラッシュ,4K撮影対応,耐水・防水機能,HDMI端子,フルセグ,ワンセグ,GPS機能,MHL対応,ハイレゾ,おサイフケータイ/FeliCa,認証機能,デュアルSIM,デュアルSIMデュアルスタンバイ(DSDS),SIM情報,発売日,,,,
シャープ,007SH KT, ,SoftBank,Android 2.3,3G:300時間,Snapdragon S2 MSM8255, ,1,, ,microSDHCメモリーカード, , ,51.8x113x19.3,,,140,3.4,854x480,NewモバイルASV液晶,3Gハイスピード,Bluetooth 3.0,○, , , , ,1610万画素, ,○, , , , , ,○,○, , ,おサイフケータイ, , , ,SIMロック解除不可 (標準SIM),2011年 9月9日 ,,,,
シャープ,007SH KT, ,SoftBank,Android 2.3,3G:300時間,Snapdragon S2 MSM8255, ,1,, ,microSDHCメモリーカード, , ,51.8x113x19.3,,,140,3.4,854x480,NewモバイルASV液晶,3Gハイスピード,Bluetooth 3.0,○, , , , ,1610万画素, ,○, , , , , ,○,○, , ,おサイフケータイ, , , ,SIMロック解除不可 (標準SIM),2011年 9月9日 ,,,,
・4-29 CSVのn番目のデータ区切りまでマッチその1
CSVのn列目のデータ区切りだけ抽出
CSVのn列目のデータ区切りだけ抽出
置換前
^([^,]*,){n-1}([^,]*){1},.*
置換後
\2
CSVの3列目のデータ区切りだけ抽出
置換前
^([^,]*,){2}([^,]*){1},.*
置換後
\2
CSVの15列目のデータ区切りだけ抽出
置換前
^([^,]*,){14}([^,]*){1},.*
置換後
\2
サクラエディタでCSVの特定の列を抽出
8桁数字日付へ対して、桁数に応じてハイフンを挿入
キャプチャ
置換前
置換後
☆="sales_season" ★
☆="carrier" ★
☆="os_type" ★
☆="standby_time" ★
☆="cpu" ★
☆="cpu_core" ★
☆="(.*?)" ★
置換後
$\1 = $this->request->getPost('\1');
$sales_season = $this->request->getPost('sales_season');
$carrier = $this->request->getPost('carrier');
$os_type = $this->request->getPost('os_type');
$standby_time = $this->request->getPost('standby_time');
$cpu = $this->request->getPost('cpu');
$cpu_core = $this->request->getPost('cpu_core');