作成日:2017-12-06, 更新日:2021-10-26
諸々
パターン修飾子
i | 大文字と小文字の違いを無視する |
---|---|
s | 改行文字を無視し、1行とみなして調べる |
u | 対象文字列をUTF-8として扱う |
e | 置換文字列をPHPコードとして実行 |
行頭、行末
^ | 後に続く文字を先頭とみなす( 「^a」で「aで始まる行」 ) |
---|---|
$ | 前にある文字を末尾とみなす( 「a$」で「aで終わる行」 ) |
制御
? | 最小一致 |
---|
繰り返し
* | 前の文字を0個以上繰り返し( a* ) |
---|---|
+ | 前の文字を1個以上繰り返し( a+ ) |
? | 前の文字が0個、もしくは1個( a? ) |
*? | 前の文字が0個以上かつ最小回数マッチ |
+? | 前の文字が1個以上かつ最小回数マッチ |
?? | 前の文字が0個、もしくは1個以上かつ最小回数マッチ |
{x,y} | 前の文字をx個~y個続き( a{1,3} ) |
{x} | 前の文字がx個続き( a{3} ) |
{x,} | 前の文字がx個以上続き( a{3,} ) |
任意の文字
. | 改行を除く任意の1文字( . ) |
---|---|
(hoge) | 文字列単位で判別 |
グループ
[abc] | 括弧内の文字のいずれか1文字 |
---|---|
[a-z] | 括弧内の範囲指定 |
[^a-z] | 括弧内の範囲指定を否定 |
キャプチャ
() | 括弧内のパターンを1キャプチャとみなし、配列戻り値の要素1以降に格納されたりする |
---|
パターンの略記法
\d | [0-9] | 数字 |
---|---|---|
\D | [^0-9] | 数字以外 |
\w | [a-zA-Z0-9] | 単語の一部とみなされる文字 |
\W | [^a-zA-Z0-9] | 単語の一部ではない文字 |
\s | [\f\n\r\t\v] | 空白文字 |
\S | [^ \f\n\r\t\v] | 空白文字以外 |
メタ文字
\a | アラート |
---|---|
\b | バックスペース |
\e | エスケープ |
\f | 改ページ |
\n | 改行 |
\r | 復帰 |
\t | 水平タブ(通常タブ) |
\v | 垂直タブ |
\0?? | 制御コード 8進数 |
\x?? | 制御コード 16進数 |
文字クラス「[ ]」で、「\」をつける必要のある記号
基本、下の4つ。
- | マイナスハイフン |
---|---|
^ | 山形記号 |
] | 閉じ角かっこ |
\ | バックスラッシュ |
サンプル
日本語を使うなら「/〇〇〇/」ではなく「/〇〇〇/u」にするのが無難。
半角英数のみ |
/^[a-zA-Z0-9]+$/ |
---|---|
全角英数のみ |
/^[a-zA-Z0-9]+$/ |
半角数字のみ |
/^[0-9]+$/ |
数字(半角・全角)のみ |
/^[0-90-9]+$/ |
ひらがな、カタカナ、漢字のみ |
/^[ぁ-んァ-ヶー一-龠]+$/ |
ひらがな、カタカナ、漢字、「、」と「。」のみ |
/^[ぁ-んァ-ヶー一-龠、。]+$/ |
ひらがな、カタカナ、漢字、半角英数、全角数字のみ |
/^[ぁ-んァ-ヶーa-zA-Z0-9一-龠0-9]+$/ |
半角・全角の連続した空白 |
/( | )+/ |
メールアドレス(簡易版) |
/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/ ※すべてのメアドは網羅されないので注意 |
半角記号 |
/^[ -\/:-@\[-`\{-\~]+$/ |
1バイト文字ではない文字 |
/[^\x01-\x7E]/ |
改行を含む任意の1文字 / 「.*」「.+」等だと改行が含まれない |
/[\s\S]+/ |
タグ関連
タグ指定無しでHTMLタグ 開始タグと中身と閉じタグ付き。imgタグは取得できない |
/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/ui |
---|---|
タグ指定アリでHTMLタグ: 改行は含めない 開始タグと中身と閉じタグ付き。imgタグは取得できない |
/(<div[^>]*?>.*?<\/div>)/ui |
タグ指定アリでHTMLタグ: 改行コード含む 開始タグと中身と閉じタグ付き。imgタグは取得できない |
/(<div[^>]*?>[\s\S]*?<\/div>)/ui |
タグ指定無しで開始タグのみ(imgタグやbrタグも含む) |
/<([\w]+)[^>]*>/ui |
指定した属性のみ ※「=」の前後に空白が入る可能性を考慮 |
/(href|src) *?= *?("|'."'".')(.+?)(\\2)/ui |
指定した属性の値が「http」ではじまるもの ※「=」の前後に空白が入る可能性を考慮 |
/(href|src) *?= *?("|'."'".')(http[s]*:\/\/?.+?)(\\2)/ui |
指定した属性の値が指定したURLではじまるもの ※「=」の前後に空白が入る可能性を考慮 |
/(href|src) *?= *?("|'."'".')(http:\/\/hogehoge\.com.+?)(\\2)/ui |
指定した属性を含むタグ |
/<([\w]+)[^>]*((href|src) *?= *?("|')(http[s]*:\/\/?.+?)(\4))[^>]*>/ui ▼ちょっぴり中身を見やすくしたもの $sub = '(href|src) *?= *?("|'."'".')(http[s]*:\/\/?.+?)(\\4)'; $attr_withTag = '/<([\w]+)[^>]*(' . $sub . ')[^>]*>/ui'; |
その他サンプル
▼CSVの項目の置き換え(preg_replace())
$csv = 'ささみ,ささみわさび,砂肝,ナンコツ'; $old = '砂肝'; $new = 'モチベーコン'; // ▼【行頭 or 「,」】【$old】【「,」or 行末】の組合せ $regexp = '(^|,)(' . $old . ')(,|$)'; // 「()」で区切られたヤツが「$1~$3」 echo preg_replace('/'.$regexp.'/u', "$1".$new."$3", $csv); // $1と$3はそのまま表示。
「$old」が1単語なら「$csv」をばらして配列にしてループで回しても良い
※正規表現と配列をループ・・・どっちが早いかは未調査。
「$old」も「CSV」ってときがあったので「preg_replace()」を使ってみた。
注意
改行コードを含む任意の文字
「任意の文字」ってコトで「.」としたいがこの場合「改行コードや空白類を含まない任意の文字」となる。
だから、改行コードを含めたい場合は「\s\S」とする必要がある。