PHPの正規表現 パターン修飾子「U」の使い方について調べています。
どこのサイトを見ても、
「この修飾子を設定すると、量指定子の「貪欲さ」が反転します。 つまり、量指定子は、デフォルトで貪欲でなく、疑問符を後ろに付けてはじめて貪欲になるようになります。 この修飾子は Perl 互換では有りません。 同様の設定は、(?U) 修飾子をパターン内で設定 するか、(.*? のように)量指定子の後に疑問符を 付けるかすることで行うこともできます。 」
と、あからさまにマニュアルからコピーしたものをただ載せているサイトばかりでした。
量指定子の「貪欲さ」って何!?この説明文を(コピーして)載せた人間は意味わかってるのか!?って言う具合です。
パターン修飾子「U」の使い方を自然な日本語で、できれば簡単な例も載せていただいて説明していただけるとありがたいです。
No.2ベストアンサー
- 回答日時:
*、+、? という正規表現のメタ文字は、可能な限り長いマッチを行おうと努力します(貪欲。
というのはそういう意味)。一方、
*?、+?, ?? というメタ文字は可能な限り短いマッチで済まそうと努力します(lazy ものぐさ)。
U修飾子はこの意味を逆転させるということです。
つまり、
長いマッチをさせたいなら *?, +?, ?? のように書き、
逆にものぐさなマッチをさせたいのなら *, +, ? と書けということになります。
貪欲だとかものぐさなものの違いがわかりやすいのはたとえば
'<a href="...">....</a>'
という文字列から '<' と '>' に挟まれた部分を取り出したいというときに<.*> と書いたとして「貪欲」なほうだと
<a href="...">....</a>
と、とちゅうの '>' も飲み込んで最後の'>'までマッチさせてしまいますが、
ものぐさなほうでは途中の'>' の時点で満足してしまうので
<a href="...">
がマッチの結果になります。
と、こんな説明でいかがでしょうか?
ご回答ありがとうございます。
とても分かりやすい説明で、助かりました!
そういうことだったんですね。
実例も明快で理解しやすかったです。
No.3
- 回答日時:
もう解決しちゃってるようなんで、他の分部の補足。
>と、あからさまにマニュアルからコピーしたものをただ載せているサイトばかりでした。
>量指定子の「貪欲さ」って何!?この説明文を(コピーして)載せた人間は意味わかってるのか!?って言う具合です。
phpの公式サイトにあるリファレンスと全く同じものがあるサイトは、たんにミラーサイトなだけで、作者が意図的に丸ごとコピーして載せているって意味じゃないですよ。
補足回答ありがとうございます。
「php preg_match パターン修飾子 U 使い方」でググって見ると、そのphpマニュアルと同じことが書いてあるサイトばかりで、本当の使い方が書いてあるサイトは1つしかありませんでした。
みんなコピーサイトですか・・・・。
使いたい機能の説明ってなかなか書いてないですね。
No.1
- 回答日時:
そのままの意味で量指定子(+や*)が後ろに「?」をつけないと動作しなくなる、ということではないでしょうか。
以下のプログラムで試してみました。
<?php
$subject = "aabbaaacc";
$pattern = "/a/";
if(preg_match_all($pattern,$subject,$matches)){
print_r($matches);
}
?>
$pattern = "/a/"; の場合
[0] => a
[1] => a
[2] => a
[3] => a
[4] => a
$pattern = "/a+/"; の場合
[0] => aa
[1] => aaa
$pattern = "/a/U"; の場合
[0] => a
[1] => a
[2] => a
[3] => a
[4] => a
$pattern = "/a+/U"; の場合("/a/"と同じ結果になる)
[0] => a
[1] => a
[2] => a
[3] => a
[4] => a
$pattern = "/a+?/U"; の場合
[0] => aa
[1] => aaa
説明通り、後ろに?をつけないと+が働かなくなるようです。
ところで何のためにこのパターン修飾子について調べているのでしょうか?
回答ありがとうございます。
どうやら、?をつけたときの挙動が逆転するらしいです。
メールの土台テキストを使用して、メールを送るサイトを作っているのですが、その方法を調べていたらこの方法が出てきました。
確かに送信はできたのですが、どういう仕組みなのかな・・・と思いまして。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 「名詞+形容詞/現在分詞/過去分詞+to不定詞の副詞的用法」の語順について 7 2022/09/22 05:27
- 日本語 〈場所を示す「に」と「で」〉 という誤り 36 2022/11/12 15:04
- 日本語 「が」についての叩き台です。ご感想をお聞かせください。 93 2022/09/29 14:11
- 英語 「to不定詞」の形容詞的用法で修飾される名詞が意味上の主語になるか目的語になるのかの判断方法について 1 2023/04/17 09:55
- 英語 「this is the/my first time~」の文法上の制約について 1 2023/04/06 09:48
- 小学校 主語 述語 修飾語 中学受験 1 2022/04/13 11:42
- 英語 品詞に関する質問です US allies Australia and New Zealand hav 3 2023/07/10 15:02
- 英語 下記のの英文に関して質問します。 “We will remind you to renew your 3 2022/11/23 18:01
- 英語 数量+前置詞/接続詞の解釈について 3 2023/01/10 11:20
- 英語 日本語の「心」に当てはまる英語はあるのでしょうか。 4 2022/04/02 15:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでクラスのメソッドで同名の...
-
PHPとHTML+Xamppの掲示板で画像...
-
入力した部分を表示させたまま...
-
PHP8を使うと、大量のWarningが...
-
phpでcookieがうまく保存されない
-
メールフォームのタイトルが文...
-
php 完了画面の送信メールのコ...
-
クラス
-
index.phpって何ですか? 具体...
-
アマゾンのような評価の星を選...
-
in_arrayについて教えて下さい。
-
プログラムコードを入力する場...
-
phpでPEAR::DBを使っているので...
-
index.phpに入るには、どうすれ...
-
awsにApacheとPHPを入れて、何...
-
オススメのプログラミングスク...
-
PHPでのパスワード制限のセキュ...
-
これの対応OSを教えて下さい。p...
-
phpのクラスメソッドの定義が長...
-
reuterの記事をbeautiful.soup....
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php 指定文字列以降の削除
-
PHPの変数で最初から2行分の文...
-
^[a-zA-Z_][a-zA-Z0-9_]* でマ...
-
DIRECTORY_SEPARATORについて
-
PHPでurlから第4レベルドメイン...
-
正規表現で「チルダ(~)」をマッ...
-
PHPと正規表現とワイルドカード...
-
正規表現でタグからURLを取り出...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
index.phpに入るには、どうすれ...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
PHP8を使うと、大量のWarningが...
-
別ファイルの変数を呼び出した...
-
index.phpって何ですか? 具体...
-
awsにApacheとPHPを入れて、何...
-
Subversionのリポジトリの削除
-
phpでPEAR::DBを使っているので...
-
.phpと.incファイルの違いはな...
おすすめ情報