by shigemk2

当面は技術的なことしか書かない

正規表現

replace

なんという事でしょう。 replaceを使って置換する事が出来るし、パターンもPerlぽく書く事が出来るのです。 さらにここでは後方参照を使っております。 var str = '「正規表現」は文字列を「パターン」で表して検索/置換する手法です。「正規表現」を使うと…

JavaScriptで正規表現

var str = "<h1>\(・ω・\)SAN値!(/・ω・)/ピンチ!</h1><h1>\(・ω・\)SAN値!(/・ω・)/ピンチ!</h1><h1>\(・ω・\)SAN値!(/・ω・)/ピンチ!</h1>"; var re = new RegExp('<h1>(.*?)</h1>', 'g'); console.log(str.match(re)); 例によってsyohex/emacs-quickrun · GitHubで実行してみると……

同じパターンの入れ子にはマッチさせられない

例えば以下のような、2つのdivが入れ子になっているHTMLがあったとして、2つのdiv全てにマッチする正規表現を書くとする。 <div .... > <div .... > 中身 </div> </div> しかし最短一致の正規表現である <div[\s\S]*?>[\s\S]*?</div>を利用しても、 <div .... > <div .... > 中身 </div> までしかマッチしない。まあ当たり前といえば当たり前で</div>…

後方参照

こんなHTMLがあって、bタグもしくはiタグに引っ掛るものをマッチする正規表現を書くとする。 後方参照を使うと<b class="a"><i class="c">b要素の中にi要素がある</i></b>場合でも正しくマッチする <[bi][\s\S]*?>[\s\S]*?</[bi]>って書くと、以下までしかマッチしない。最後のb閉じタグがマッチしない…

最長一致と最短一致

このようなHTMLがあったとして、 <p class="entry">p要素です。</p> .... </html> このHTMLにだけマッチする正規表現を書きたいとする。 <p class="entry"> でも、 <p[\s\S]*>と書いたら、全てのHTMLにマッチしてしまう。\s\Sが全ての文字にマッチするので、 <p>hoge</p><p>fuga</p> の最初のにマッチしてしまうからである。 や*な</p[\s\s]*></p>…

文字列の先頭/最後にマッチ

^と$を使う。An apple falled from the tree.という文章について、 ^AnはAn appleのAnにマッチするし、 tree\.$は、最後のtree.にマッチする。

特殊文字をちょろっと

<tr> <td>hoge</td> <td>fuga</td> </tr> </td>\n<td>だと、最初のとにマッチする。</td>

どれかのパターンにマッチ

(this|that)this か thatにマッチ。 ([Tt]his|[Tt]hat)で、This this That thatのどれかにマッチ。 ([Tt]his|[Tt]hat) (is|was)とする事で複数回利用が可能となる。

否定

a/b/c以外の文字にマッチという風にするなら、 [^abc]と書く。abc abd abeなら、ab[^cd]でabeにマッチする。

文字クラス

「-」の文字を使って、ある範囲に入る全ての文字を指定できる。これを文字クラスという。 [a-zA-Z][0-9]で、a-zか、A-Zのどれか一文字+0-9のどれか一文字という風になる。 A0 とか z8とか。

どれか一文字にマッチさせる

[]を使うとよい。故に、a/b/cのどれかだと、 [abc]となる。This is a pen. で、[Th]is なら、Thisに引っ掛かる。

正規表現の修飾子

Perl基礎入門 こちらから。 修飾子 意味 g 繰り返しマッチする i 大文字と小文字の区別をしない o 変数展開を1度だけ行う m 文字列を複数行として扱う s 文字列を単一行として扱う x 拡張正規表現を行う 追記: 上はperlの正規表現でのオプションで、 rubyやp…

正規表現の略記法

こちらから。 略記法 文字クラス 意味 \w [a-zA-Z0-9_] アルファベット、数字、下線 \W [^a-zA-Z0-9_] アルファベット、数字、下線以外 \s [\r\t\n\f] 空白文字(スペース、復帰文字、タブ、改行文字、ラインフィード) \S [^\r\t\n\f] 空白文字以外 \d [0-9…

^(ハット)

スタートを指定する。 ^hoge で、hogeから始まるワードを正規表現で検索する。

{n}

n回繰り返す。 [a-z0-9]{12} で、英数字が12回繰り返されたらマッチする。

正規表現をテストする

Rubular: a Ruby regular expression editor and tester実にシンプル。説明不要!でも一応説明すると、作成した正規表現がきちんと 期待通りにマッチするか調べてくれるサイトです。Your regular expression:に正規表現を入力し、 Your test string:に試した…

正規表現とワイルドカード

メタ文字を使うのはどちらも一緒。ワイルドカードについて。 コチラから。 ワイルドカードとは 【 wild card 】 - 意味/解説/説明/定義 : IT用語辞典 「*」が任意の長さの任意の文字を、「?」が任意の1文字を意味する。 正規表現について。「*」 直前の文字…

WebDBPress Vol.58 PHP転ばぬ先の杖 その3

文字エンコーディングと正規表現PHPの文字エンコーディング ISO-2022-JP 日本語Eメールでよく使われる。 Shift_JIS(CP932) 古いガラケーでも使える文字コード。プログラムやDBでの設定は非推奨なので注意すべし。 EUC-JP 昔プログラムやDBで使われていた文字…