Wordで「正規表現」を使う

Wordの検索、置換にはワイルドカードという仕組みがあります。
テキストエディタやプログラム言語でおなじみの正規表現のように使えます。 (さらに…)

電話番号を取得するための正規表現

日本の電話番号を正規表現を使って取得する方法を考えます。 (さらに…)

JavaScriptは肯定先読みはできるが肯定後読みはできない

JavaScriptの正規表現で該当文字列を全て抽出」について考えました。
matchで抽出した文字列に対しreplaceで無駄な部分を省く方法を使いました。
フラグ「g」を使うと必要な部分だけを抽出することができないからです。
しかし二度手間なのでスマートではありません。

「肯定先読み」を使うとあらかじめ無駄な部分を省くことができます。正規表現で「(?=パターン)」を使うとパターンに合致するか判定しますが抽出には含まれません。
しかしJavaScriptでは「肯定後読み」ができないそうです。
郵便番号を抽出する例で確認してみます。 (さらに…)

JavaScriptの正規表現で該当文字列を全て抽出

JavaScriptにはmatchという関数(メソッド)があり、正規表現を使って、主に次の二つのことができます。

  • 文字列が条件に合致しているかどうかを判定。
  • 条件に合致した文字列を抽出。

これを利用して文字列から郵便番号を抽出してみます。
郵便番号は「163-8019」のような文字列です。
「半角数字3文字」+「半角ハイフン」+「半角数字4文字」であるとします。 (さらに…)

ハングルを判定する正規表現

ハングルは全部で11172文字もあるそうです。
ハングルは基本的な記号の組合せでできているのですが、その組み合わせた結果をすべて書き出すと11172文字になるということのようです。
コンピューターの世界では文字コードとしてはAC00からD7AFに割り当てられています。
10進数だと44032から55215までです。これは11184文字分に相当します。ハングルは全部で11172文字なので収まります。 (さらに…)

JavaScriptで全角英数字を半角に変換

JavaScriptで全角英数字を半角に変換する方法を考えてみました。

全角英数字は、0から9まで、AからZまで、aからzまで、が該当します。
一方、半角英数字は、0から9まで、AからZまで、aからzまで、が該当します。
これらの文字コードを調べると次の通りです。 (さらに…)

PHPの正規表現(preg系)のパターン修飾子

PHPにはpreg_matchやpreg_replaceという関数があります。正規表現を使って検索、置換するためのものです。
これらの関数は「preg_match("/.*/i",$str)」のように使います。この「/.*/i」の「i」の部分がパターン修飾子です。
よく使うものについてまとめます。 (さらに…)

preg_matchとpreg_match_all

PHPには正規表現で文字列を検索するためのpreg_matchとpreg_match_allという関数があります。
これらについてまとめてみました。 (さらに…)

複数行にマッチさせる正規表現

JavaScriptで複数行にマッチさせる方法が分かりません。

やむを得ず次のように改行を「@」などの文字に変換してからマッチさせていました。

moto=moto.replace(/\n/g,"@");
saki=moto.match(/.*/);

これだと文字列に元々「@」が含まれているとアウトです。

「.*」だと複数行にマッチしないのは「.」が「改行を除く任意の1文字」を表すためです。
そこで次のようにします。

saki=moto.match(/(\n|.)*/);

「改行」または「改行を除く任意の1文字」となってマッチします(「\r」を含める場合もあるかもしれません)。

このように悩んでいたのですが、スマートな解決策がありました。それもマイクロソフトのサイトに。
正規表現の構文

「.」
'\n'を除く任意の1文字に一致します。'\n'を含めて任意の文字と一致させるには、'[\s\S]'などのパターンを指定します。

よく見ているページなのに見落としていました。
つまり次のようにすればよいのです。

saki=moto.match(/[\s\S]*/);

マイクロソフトの説明は次の通りです。

「\s」
空白、タブ、フォーム フィードなどの任意の空白文字と一致します。[ \f\n\r\t\v]と同じ意味です。
「\S」
空白文字以外の任意の文字と一致します。[^ \f\n\r\t\v]と同じ意味です。

「\s」が改行文字などを含む空白文字、「\S」が「\s」以外の任意の文字というわけですから、両方を使えば「改行を含む任意の1文字」となります。

なお、本件に関して、フラグに「m」を使う方法はJavaScriptではうまくいきません。

正規表現におけるハイフンの挙動

「-」を「ハイフン」と読みますが、年配の人だと「ハイフォン」と読む人が多いようです。
英語の発音記号を見るとどちらでも正しいようですが、「ハイフォン」だとベトナムの都市を思い浮かべてしまうので、私は「ハイフン」と読んでいます。

正規表現におけるハイフンは「○から○まで」という範囲を指定するときに使えてとても便利ですが、この挙動について勘違いしていたので、調べてみました。JavaScriptです。

「a-b-c」という文字列に対して正規表現「[a-c]」を使ってみます。

x="a-b-c";
y=x.match(/[a-c]/g);
z=y.join(",");

この場合、結果(z)は「a,b,c」となりました。
同じようにして色々と試してみます。

正規表現 結果
a-b-c [a-c] a,b,c
a-b-c [a-] a,-,-
a-b-c [-c] -,-,c
a-b-c [a-c-] a,-,b,-,c

つまり[○-○]という形で使った場合は「○から○まで」という意味になりますが、これ以外では単に「-」という文字そのものを表すということになるようです。
[a-c]⇒a,b,c
[a-]⇒a,-
[-c]⇒-,c
[a-c-]⇒a,b,c,-

実は、今までハイフン(「-」)を指定するには「\-」としていたのですが、実際は「\」は不要でした。

新しい記事 | 古い記事

タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報