PHPで、以下の置換(正規表現)はどういう意味でしょうか?

preg_replace('/\s+?(\S+)?$/', '', $string)

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/01/29 11:48:43
  • 終了:2007/01/29 13:23:53

ベストアンサー

id:JTCY No.1

JTCY回答回数21ベストアンサー獲得回数12007/01/29 12:10:43

ポイント35pt

preg_replace(A,B,C)は、CからAという表現を抜け出し、Bに変換するperl互換の正規表現関数です。この表現では、

\s → 空白文字(スペース、タブ、改行、復帰、ラインフィード)

+ → 一回以上の繰り返し

? → 最短マッチ(全体の条件に当てはまる中で、一番短いものを選択)

\S → 空白文字以外

$ → 行末

なので、解釈すると

空白文字が何文字か続いて、その後に空白文字以外が何文字か続く場合、それを削除してしまう

ということになります。

#ただし、\s+?ってのは、実質空白文字一つにしかマッチしないのでは……

id:P-mako

ご回答ありがとうございます。

メタ言語を分解して解説いただいたのは、わかりやすくて助かりました。

ありがとうございます。

2007/01/29 13:23:39

その他の回答(1件)

id:JTCY No.1

JTCY回答回数21ベストアンサー獲得回数12007/01/29 12:10:43ここでベストアンサー

ポイント35pt

preg_replace(A,B,C)は、CからAという表現を抜け出し、Bに変換するperl互換の正規表現関数です。この表現では、

\s → 空白文字(スペース、タブ、改行、復帰、ラインフィード)

+ → 一回以上の繰り返し

? → 最短マッチ(全体の条件に当てはまる中で、一番短いものを選択)

\S → 空白文字以外

$ → 行末

なので、解釈すると

空白文字が何文字か続いて、その後に空白文字以外が何文字か続く場合、それを削除してしまう

ということになります。

#ただし、\s+?ってのは、実質空白文字一つにしかマッチしないのでは……

id:P-mako

ご回答ありがとうございます。

メタ言語を分解して解説いただいたのは、わかりやすくて助かりました。

ありがとうございます。

2007/01/29 13:23:39
id:pacochi No.2

ぱこち回答回数247ベストアンサー獲得回数1132007/01/29 13:09:21

ポイント35pt

\s は空白文字、\S は空白以外の文字、+? は一文字以上の最短マッチ、$ は文末を表しています。

なので、最後の単語または行を取り除く処理をしているのだと思われます。

長い文章の最初の数十文字を概要として表示する時などに、一定の長さで文字列を切り出した後に半端な行または単語を切り落とすために使われるような正規表現ではないでしょうか。

検索してみたら「文字列を丸める」という表現が使われていました。

id:P-mako

ご回答ありがとうございます。

OCEAN-NETでも同様の正規表現が案内されているんですね。

ありがとうございます。

2007/01/29 13:23:41

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません