- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPにおける正規表現について)
PHPにおける正規表現の活用方法
このQ&Aのポイント
- PHPにおける正規表現を使って複数行の文字列から特定のパターンを検索する方法について教えてください。
- 対象の文字列が複数行にわたっている場合でも、改行文字を削除することなく検索する方法を教えてください。
- 正規表現の修飾子「s」や「m」を使っても一致させることができない場合、どのように対処すれば良いでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
noname#244856
回答No.2
補足
ご回答ありがとうございます。 ご回答の様に、 たとえば、【地球連合軍】というキーワードを実行時にユーザー入力など動的に変化する文字列から一致させたいときは $hoge = preg_match('/地\\s*+球\\s*+連\\s*+合\\s*+軍/', $data, $matches); と、 [[どの文字のあとでも改行や空白があってもよい前提で正規表現をかかなきゃいけない]] んですね。 >>$hoge = preg_match('/E\\s*+F/', $data, $matches); とありますが、 【\\s*+】 上記、正規表現についてですが、このバックスラッシュ二つにはついては後に回すとして アスタリスクの後の+についてがちょっとわかりません。 これは正規表現上の空白類文字を表す【¥s】が0回以上【*】が一回以上【+】出現するという意味でよいでしょうか? また http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10110102910 上記URLの >><個人的なお願い> 「\\」について、エスケープ不要である場合もある、 とありますがこれは例えば、 $toDay = "今日は、コンビニで¥3500円支払いました"; といった文字列を扱う場合、通常【¥3】というバックスラッシュのあと全角数字3に該当するエスケープ文字が 存在しない場合、事実上、バックスラッシュがそのまま¥と表記させる事例のことですよね? (※本来バックスラッシュ後0~7の半角数字がくると8進数形式のアスキー文字のようですが) 次に、 掲題の回答にありました 【\\s*+】 の部分ですが、 本来PHPにおいて【¥s】というエスケープ文字は存在しませんよね PHPマニュアルにおいても存在しないようですし、 実際にPHPのインタープリタで確認してみると >>> echo "文字列¥sテスト"; とうっても 出力されるものは #=> 文字列¥sテスト と表示されますが・・・。 上記と同様に http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10110102910のページに記載している >><個人的なお願い> >>「PHPのためのエスケープ」と「正規表現エンジンのためのエスケープ」の両方を行う必要があります。 つまり「\」という文字自体を正規表現でマッチさせたければ「\\\\」とする必要があるのです。 とありますが、これはPHPのマニュアルにもどこかに記載があったとおもったのですが PHPは正規表現そのものを文字列で書くため 「PHPのためのエスケープ」これはPHPの文字列としての【¥¥¥¥】がエスケープシーケンスされて【¥¥】という文字が 「正規表現エンジン」へわたるという意味ですよね?正規表現そのものは文字列なので【¥¥】はエスケープされて 【¥】となると。これはつまりは正規表現エンジン内でも文字列としてあつかっているということですかね? ....この辺はPHPのCレベルの実装みないと正確にはりかいできないのですかね。