正規表現
秀丸エディタのマクロで正規表現を使った置換をする記述
-----------------------------------------
//正規表現を使った置換を実行
replaceallfast"パターン","置換後の文字",regular;
-----------------------------------------
「.mac」などの拡張子で保存して、「マクロ」-「マクロ実行」からファイルを選択する
---メモ---
replacedown → 下方向に置換する
replaceup → 上方向に置換する
replaceall → すべて置換する
replaceallfast → すべてを高速に置換する
regular は正規表現を使うためのオプション。省略した場合は正規表現なしの置換になる。
//エスケープは¥¥ 例: 「.」ではじまる文字列
replaceallfast"^¥¥..*$","",regular;
//後方参照は¥¥1
カテゴリー:正規表現, 秀丸エディタ
秀丸エディタの正規表現で、改行をふくんだ一行をまるまる削除する記述
正解
------------------------------------
^なんらかパターン¥n
------------------------------------
以下のやり方だと改行が残ってしまうのでダメ
×
------------------------------------
^なんらかパターン$
------------------------------------
×
------------------------------------
^なんらかパターン¥n$
------------------------------------
カテゴリー:正規表現, 秀丸エディタ
秀丸エディタである文字列が入っていない行を削除するには、grep(グレップ)機能を使う。すると、ある文字が含まれる行だけを抽出できる。それにより、特定の文字列の入っていない行を削除したのと同じ結果になる。
grep は、「ファイル全体から (global) 正規表現 (regular expression) に一致する行を表示(print)する」機能。
使い方は、「検索」 → 「grepの実行」
「grepの実行」は、対象にするフォルダを指定できるので、指定フォルダの中に複数のファイルを入れれば、いくつものファイルから一度にデータを抽出できる。
カテゴリー:正規表現, 秀丸エディタ
連続した改行を一つにまとめる正規表現のサンプルコード
------------------------------------------
preg_replace('/(\n)+/us','$1',$contents);
------------------------------------------
もっと確実なの
------------------------------------------
preg_replace('/(\n|\r|\r\n)+/us',"\n",$contents);
------------------------------------------
"\n" の部分を ''(シングルクォーテーション)で囲むと \n の部分がそのまま表示され改行にならないので注意。
カテゴリー:PHP, 正規表現
「abc」という文字列で始まらない
---------------------
^(?!abc).+$
---------------------
文頭から文末まで「abc」という文字列を含まない
---------------------
^(?!.*abc).+$
---------------------
文字列start~endまでに「abc」という文字列を含まない
---------------------
start(?:(?!abc).)*?end
---------------------
参考URL:
http://ynomura.dip.jp/archives/2015/12/post_53.html
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。マルチラインモードにすることで、文章途中の^や$がマッチして期待した動作になる。
カテゴリー:PHP, 正規表現
文字列の途中で2文字以上の言葉の集まりにOR検索をしたい場合は、パーレン(丸カッコ)でくくってパイプ(|)で区切る。
サンプル文字列:
------------------------------------
タイトル123 タイトルあいう タイトルABC
------------------------------------
上の文字列から「タイトル123」と「タイトルABC」だけにマッチさせたい場合の記述例:
------------------------------------
タイトル(123|ABC)
------------------------------------
カテゴリー:正規表現