正規表現


【秀丸エディタ】マクロで正規表現を使った置換をする

秀丸エディタのマクロで正規表現を使った置換をする記述

-----------------------------------------
//正規表現を使った置換を実行
replaceallfast"パターン","置換後の文字",regular;
-----------------------------------------

「.mac」などの拡張子で保存して、「マクロ」-「マクロ実行」からファイルを選択する

---メモ---

replacedown → 下方向に置換する
replaceup → 上方向に置換する
replaceall → すべて置換する
replaceallfast → すべてを高速に置換する

regular は正規表現を使うためのオプション。省略した場合は正規表現なしの置換になる。

//エスケープは¥¥ 例: 「.」ではじまる文字列
replaceallfast"^¥¥..*$","",regular;

//後方参照は¥¥1

【秀丸エディタ】正規表現で改行を含む一行を丸々削除する

秀丸エディタの正規表現で、改行をふくんだ一行をまるまる削除する記述

正解
------------------------------------
^なんらかパターン¥n
------------------------------------

以下のやり方だと改行が残ってしまうのでダメ

×
------------------------------------
^なんらかパターン$
------------------------------------

×
------------------------------------
^なんらかパターン¥n$
------------------------------------

秀丸エディタである文字列が入っていない行を削除する

秀丸エディタである文字列が入っていない行を削除するには、grep(グレップ)機能を使う。すると、ある文字が含まれる行だけを抽出できる。それにより、特定の文字列の入っていない行を削除したのと同じ結果になる。

grep は、「ファイル全体から (global) 正規表現 (regular expression) に一致する行を表示(print)する」機能。

使い方は、「検索」 → 「grepの実行」

「grepの実行」は、対象にするフォルダを指定できるので、指定フォルダの中に複数のファイルを入れれば、いくつものファイルから一度にデータを抽出できる。

【PHP】連続した改行を一つにまとめる正規表現

連続した改行を一つにまとめる正規表現のサンプルコード
------------------------------------------
preg_replace('/(\n)+/us','$1',$contents);
------------------------------------------

もっと確実なの
------------------------------------------
preg_replace('/(\n|\r|\r\n)+/us',"\n",$contents);
------------------------------------------

"\n" の部分を ''(シングルクォーテーション)で囲むと \n の部分がそのまま表示され改行にならないので注意。

【正規表現】文字列の否定、ある文字列を含まない

「abc」という文字列で始まらない
---------------------
^(?!abc).+$
---------------------

「abc」という文字列を含まない
---------------------
^(?!.*abc).+$
---------------------

Aの直後から「abc」という文字列を含まない繰り返し
---------------------
A((?!abc).)*?
---------------------

直後に「ABC」も「XYZ」もこないY
---------------------
Y(?!(ABC|XYZ))
---------------------

↓↓もう少し詳しく理解する。↓↓

(?!」と「)」で文字列を囲む正規表現を否定的先読みという。

これを利用すると、囲まれた文字(パターン)がある文字の直後に存在しない位置にマッチする。普通、正規表現はマッチする文字列を見つけるが、(?!――)はその位置を見つけるだけである。「^」が行頭、「$」が行末の場所を示すのと同じように(?!――)も場所を示すだけ

次のパターンと比較すると理解しやすい。

行頭から続く文字を繰り返している
-----------------
^.*
-----------------

(Aの直後から)abcという文字列を含まない位置にある文字を繰り返している
-----------------
A((?!abc).)*
-----------------

くどいようだが赤字はあくまでも位置を示す。

【PHP】ある文字列を含む行だけを削除する正規表現

ある文字列を含む行だけを削除する正規表現の覚書

次のようなテキストの場合
--------------------------------------

ここは残す行
ここは削除する行
ここは削除する行
ここは残す行

--------------------------------------

「削除する」というワードが含まれている行をなくしたいので、正規表現は次のようになる

//行頭から改行コードまでを空文字に置き換える
preg_replace('/^.*削除する.*[\r\n]/u','',$honbun);

これではうまくいかない場合がある。二行目以降の^がマッチしないケース。
次の書き方ならうまくいく。

preg_replace('/^.*削除する.*$/um','',$honbun);

ポイントは、修飾子m。マルチラインモードにすることで、文章途中の^や$がマッチして期待した動作になる。

【正規表現】文字列の途中でパイプを使ったOR検索

文字列の途中で2文字以上の言葉の集まりにOR検索をしたい場合は、パーレン(丸カッコ)でくくってパイプ(|)で区切る。

サンプル文字列:
------------------------------------
タイトル123 タイトルあいう タイトルABC
------------------------------------

上の文字列から「タイトル123」と「タイトルABC」だけにマッチさせたい場合の記述例:
------------------------------------
タイトル(123|ABC)
------------------------------------