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

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

ただいまの
回答率

88.90%

正規表現 改行を検出できるかできないか( ^ と $ ー\A と \z )

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,156

reotantan

score 257

^ と $ ー\A と \z の違いが分かりません。
正規表現において^ と $は行の先頭、末尾  
\A と \zでは文字列の先頭、末尾という説明で、
前者は改行を検出できず、後者はできるという話がありました。
なぜ前者では、改行を検出できないのでしょうか

回答宜しくお願いします

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

例えば以下のような改行を含む文章があったとします。

今日はいい天気
明日も晴れ

行の先頭は「今」と「明」
文字列の先頭は「今」
行の末尾は「気」と「れ」
文字列の末尾は「れ」
です。

多分、正規表現によるバリデーション関連で出てきたのだと思います。
こちらが参考になります。
正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/05 11:15

    回答ありがとうございました

    キャンセル

  • 2017/05/05 13:15

    php で正規表現を使用する場合は、パターン修飾子にも注意が必要です。
    http://php.net/manual/ja/reference.pcre.pattern.modifiers.php
    パターン修飾子 m で ^ と $ は挙動が変わります。
    マニュアル以上の説明がうまく出来ないので、マニュアル見て理解できない場合、改めて識者に質問をしてみて下さい。

    キャンセル

+1

"あいうえお\nかきくけこ\n"という文字列があったとして、^は、の前との前の2カ所にマッチして、$の後ろとの後ろと最後の改行の後ろの3カ所にマッチします。
\Aは、の前だけにマッチし、\zは最後の改行の後ろ(文字列末尾)だけにマッチします。

\A と \zでは文字列の先頭、末尾という説明で

は合ってますが、

正規表現において^ と $は行の先頭、末尾  

$は間違っています。$は行の末尾および文字列末尾にマッチします。

なぜ前者では、改行を検出できないのでしょうか 

\A\zはその定義が、行と関係ないからです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/05 11:16

    回答ありがとうございました

    キャンセル

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

  • ただいまの回答率 88.90%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る