質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

3435閲覧

正規表現で検索パターンを空("//")にした場合、何にマッチしているのか?

StupidDog

総合スコア263

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

2クリップ

投稿2015/09/18 13:36

編集2015/09/18 13:45

質問内容
PCRE(Perl互換正規表現)を検索パターンとして受け取る関数を呼び出すとき、
検索パターンを「"//"」とした場合、正規表現として何にマッチすると説明できるのでしょか?

質問の詳細
PHPマニュアルの「preg_split」の使用例に、文字列を文字要素に分割する例があります。
preg_split — 正規表現で文字列を分割する

このコードでは、検索パターンとして「"//"」を渡しています。
正規表現を記述する際("/pattern/")のpatternを空にすると正確には何にマッチしているのでしょうか。

検証コード1

php

1<?php 2$arr = preg_split("//", "abc", NULL, PREG_SPLIT_NO_EMPTY); 3print_r($arr);

出力結果1

Array ( [0] => a [1] => b [2] => c )

一見文字の間にマッチしているように見えます。
しかし、フラグとして「PREG_SPLIT_NO_EMPTY」を指定しない場合、次の結果になります。

検証コード2

php

1<?php 2$arr = preg_split("//", "abc", NULL); 3print_r($arr);

出力結果2

Array ( [0] => [1] => a [2] => b [3] => c [4] => )

前後に空要素があり、PREG_SPLIT_NO_EMPTYにより削除されていたようです。

ここで、疑問なのですが前後の要素は何によって区切られた結果なのでしょうか?

検証として同じ正規表現を使用できる「preg_replace」で対象となった区切りを
文字に置き換えてみました。

検証コード3

php

1<?php 2$str = preg_replace("//", "-", "abc"); 3print($str);

出力結果3

-a-b-c-

この結果から、preg_splitの処理として前後の空要素が追加されたのではなく、
文字の間以外に、文字列の前後にもマッチしています。
これはマッチ処理の実装の結果なのか、正規表現として処理結果なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「空文字列」にマッチします。
結果的に、文字列先頭、文字列末尾、文字の間、にマッチすることになります。

投稿2015/09/18 14:13

otn

総合スコア84533

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

StupidDog

2015/09/18 14:29

回答ありがとうございます。 「空文字列(くうもじれつ)」を初めて知りました。 正規表現の考えで「何も文字を含まない文字列」と言うことですね。 これで、明確に何にマッチングさせているかを説明できます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問