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

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

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

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

正規表現

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

Q&A

解決済

4回答

277閲覧

先頭の位置にマッチする理由

aaaaaaaa

総合スコア501

PHP

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

正規表現

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

0グッド

0クリップ

投稿2017/12/19 10:17

/usr/local/bin/gccという文字列を**\b/\w*/\b**という正規表現(PHP)で走査したときの動作です。
コチラで**/usr/local/bin/gccという文字列を\b/\w*/\b**という正規表現(PHP)で走査したときの動作です。

正規表現に位置の概念(先読みや跡読みで使うやつ)があるのは、知っておりますが、1.の部分で先頭の位置にマッチする理由はなぜでしょうか。
画像にある文字列と正規表現でなくとも必ず、正規表現で走査するときまず最初に先頭の位置がマッチします。何か理由があってこのような仕様になったのだと思いますが、どんな理由なのでしょうか。

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

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

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

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

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

guest

回答4

0

例えば、

var str = "aaaa bbbb cccc";

これを、str.replace(/\b/g, "|")とすると、

置換結果は

|aaaa| |bbbb| |cccc|

となります。つまり、単語の区切りとしては"|"がある場所となります。

投稿2017/12/24 08:37

imamoto_browser

総合スコア1161

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

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

0

何にでもいえることですが、一次情報(PHPマニュアル)には目を通した方が良いと思います。
http://php.net/manual/ja/regexp.reference.escape.php

\b
単語境界
(中略)
単語境界 (word boundary) とは、検索対象文字列において、 カレントの文字およびその前の文字が同時に \w もしくは \W にマッチしない(すなわち、片方が \w にマッチし、もう片方が \W にマッチする)位置、もしくは、文字列の始めか終わりで、 その始めか終わりの文字が \w にマッチする位置の ことです。

この場合は「文字列の始めか終わりで、 その始めか終わりの文字が \w にマッチする位置」に該当する為に文字列の先頭にマッチしています。

何か理由があってこのような仕様になったのだと思いますが、どんな理由なのでしょうか。

仕様に理由が必要ですか。
私は仕様書に求める答えがあれば納得しますが、質問者さんの中では納得できない何かがあるのでしょうか。

Re: aaaaaaaa さん

投稿2017/12/24 13:53

think49

総合スコア18162

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

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

0

ベストアンサー

  1. 最左・最長一致の原則に従うのが御約束
  2. \bは”単語の区切り”に一致する事になっており、行頭=単語の開始地点=単語の区切り。

投稿2017/12/19 10:31

KojiDoi

総合スコア13671

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

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

aaaaaaaa

2017/12/20 10:46

ご回答ありがとうございます。DFA(NFAも?)の最も左且つ最も長いものにマッチする概念があるから先頭文字の手前の位置にもマッチングするわけですね。 重ね重ね申し訳ありませんが一つ質問させてください。 https://gyazo.com/2c469a5610c211e45d52b9ea390a0e65 先頭の位置にマッチするのみで、例えばBの手前の位置やCの手前の位置を先述の先頭の位置のように走査しないのはなぜなのでしょうか。
guest

0

最初に先頭を見るのは当然です。
それ以外の選択肢として何かありますか?

投稿2017/12/19 15:54

otn

総合スコア84538

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問