• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:この正規表現のパターンについて)

正規表現のパターンについての意味とは?

このQ&Aのポイント
  • 質問内容:この正規表現のパターンについての意味を教えてほしい。
  • 質問の背景:正規表現の使い方を学習したいが、このパターンの意味がわからない。
  • リンク:[こちらのページ](http://okwave.jp/qa/q7300031.html)でベストアンサーが紹介されている。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>それとも、「?:」は、正規表現の一部なのでしょうか? そうです。 いわゆるキャプチャしないサブパターンになります。 こちらを参考にしてください

参考URL:
http://www.php.net/manual/ja/regexp.reference.subpatterns.php
a-z_A-Z
質問者

お礼

ありがとうございます。 これで、今日は気持ちよく寝れます。 また、サブパターンなるものを知り、賢くなってしまいました。 「いや~、改めて質問してよかったです」 実は、前回の質問で、可変の場合は、<p>タグのところを、FORで回そうかと考えていました。 おかげで、すっきりしたコードになりそうです。 どうぞ、これからもよろしくお願いします。 ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ごめんなさい、混乱させたみたいですね 今回の件については「?:」はあってもなくてもおなじです わかりにくければ抜いてかまいません (?:hogehoge)はマッチした値を返さないという意味です したがって $pattern ="/((?:.*?<p>.*?<\/p>){3}).*/mis"; であれば、$0に$before全体が返ってきて、$1にマッチした3つの段落が返ってくる だけですが $pattern ="/((.*?<p>.*?<\/p>){3}).*/mis"; とすると、$0に$before全体が返ってきて、$1にマッチした3つの段落が返ってくる ところまで同じですが、$2に最後にヒットした文字「\n<p>おじいさんと</p>」が 返ってきます。 preg_match()などを使うと挙動の違いを確認できます。 ちょっとわかりづらい構文ですが以下ためしてみてください。 <?PHP $before =<<<EOD <p>昔、昔</p> <p>あるところに</p> <p>おじいさんと</p> <p>おばあさんが</p> <p>いました</p> EOD; $pattern ="/((?:.*?<p>.*?<\/p>){3}).*/mis"; preg_match($pattern,$before,$match1); $pattern ="/((.*?<p>.*?<\/p>){3}).*/mis"; preg_match($pattern,$before,$match2); ob_start(); print_r($match1); $m1=ob_get_contents(); ob_clean(); print_r($match2); $m2=ob_get_contents(); ob_end_clean(); print "<pre>\n"; print htmlspecialchars($m1); print "<hr>\n"; print htmlspecialchars($m2); print "</pre>\n"; ?> よほど複雑な検索をするとき以外はあまり気にする必要はありません。

a-z_A-Z
質問者

お礼

ありがとうございます。 せっかく回答いただいたのに、まだ理解が出来ていません。 しかし、今後のために理解しようと思うので、もう少しお付き合いください。 さて、一応、いろいろ調べました。 そこで、たどり着いた予想が、三項演算子かな?です。 >(?:hogehoge)はマッチした値を返さないという意味です これは、三項演算子で、「?」と「:」の間に何もないので、値を返さないと解釈していいのでしょうか? それとも、「?:」は、正規表現の一部なのでしょうか? よろしくお願いします。

関連するQ&A