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

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

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

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

Q&A

解決済

2回答

330閲覧

PHPのpreg_match_allについて

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2017/08/14 16:08

PHPのpreg_match()やpreg_match_all()の第3引数について。

preg_match_all()は第1引数にパターン、第2引数に調べる対象を渡しますよね?

第3引数を$matchesとし、マッチした文字列をそれぞれA、B、Cとすると、

$matches[0]にはパターンに一致した文字列A、B、Cが順に[0][0]、[0][1]、[0][2]
に入り、

$matches[1]にはパターンにある一番初めのサブパターンが順に[1][0]、[1][1]、[1][2]
に入り、

同様に$matches[2]には二番目のサブパターンの部分が順に[2][0]、[2][1]、[2][2]と入る。

この認識は正しいでしょうか?

また、一番目のサブパターンに一致した値は$1で取り出すことができますよね?

回答よろしくお願いします。

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

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

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

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

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

guest

回答2

0

preg_match_all
マニュアル見るなり、実験するなりですぐに解決しそうですが。

追記
$1 は、マニュアルの上記の箇所だけだとわからないですね。
サブパターンpreg_replacereplacementをあわせて読むと良いです。

実験用のスクリプトサンプルを追記しておきますね。

php

1<?php 2preg_match_all( 3 "/(.)(.)/", 4 "abcdef", 5 $out, 6 PREG_PATTERN_ORDER); 7var_dump($out); 8preg_match_all( 9 "/(.)(.)/", 10 "abcdef", 11 $out, 12 PREG_SET_ORDER); 13var_dump($out); 14 15echo 'おまけ'.PHP_EOL; 16preg_match_all( 17 "/(?<TEST>.)(.)/", 18 "abcdef", 19 $out); 20var_dump($out); 21preg_match_all( 22 "/(?<TEST>.)(.)/", 23 "abcdef", 24 $out, 25 PREG_SET_ORDER); 26var_dump($out); 27

さらに追記
もし、$1 という表現を正規表現内で使用したいのであれば、後方参照を確認してください。
実験用のサンプルは以下のとおりです。

php

1<?php 2preg_match_all( 3 "/(.)(.)(\g{1})/", 4 "abacdefaf", 5 $out); 6var_dump($out);

投稿2017/08/14 16:39

編集2017/08/15 01:59
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/08/15 06:23

ありがとうございました。
退会済みユーザー

退会済みユーザー

2017/08/15 08:03

記載したコードも動かさず、マニュアルも見てないみたいなので残念です。。。
退会済みユーザー

退会済みユーザー

2017/08/21 01:30

なんかすごいマイナスくらってるなぁ^^;
guest

0

ベストアンサー

マニュアルの説明ではわかりにくくちょっとややこしいのですが認識の通りです。

/(.)(.)(.)/abcdefにかけると

[['abc','def'], ['a','d'], (1番目のカッコ) ['b','e'], (2番目のカッコ) ['c','f']] (3番目のカッコ)

となります。

また、一番目のサブパターンに一致した値は$1で取り出すことができますよね?

こっちは出来なかったんじゃなかったでしょうか。preg_replaceで置き換える時の参照には使えますが。

投稿2017/08/14 21:47

suzukis

総合スコア1449

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

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

退会済みユーザー

退会済みユーザー

2017/08/15 06:23

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問