人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPで利用できる正規表現で質問です。

"あ【いう】えおかき【こく】け【こ】"

"あえおかきけ" (【】を消去)

という文字列の変換と、【】の中身を抽出して配列に書き出したいんですがどう書けば良いでしょうか?
よろしく御願いします。

●質問者: wqwqwqwq
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP 抽出 文字列 正規表現 配列
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tezcello
●35ポイント

こんな感じでしょうか?

$str = 'あ【いう】えおかき【こく】け【こ】';

$res = preg_replace('/【.+?】/', '', $str);
var_dump($res);

文字コードは、PHPの内部コード等に合わせて下さい。(それらを含めて UTF-8 にしておくのが無難かも)

結果は、

string(18) "あえおかきけ"

こうなりました。


2 ● killingofthedead
●35ポイント

二回に分けないとダメですかね。

<?php
$str = "あ【いう】えおかき【こく】け【こ】";
$ptn = "/【(.+?)】/";

// 「あえおかきけ」が出力される
$str2 = preg_replace($ptn, "", $str);
print($str2 . "\n");

// $m[0]は無視
// $m[1][1] = "いう";
// $m[1][2] = "こく";
// $m[1][3] = "こ";
preg_match_all($ptn, $str, $m);
for ($i = 0; $i < count($m[1]); $i++) {
 print($m[1][$i] . "\n");
}
?>

preg_match_allについては以下をよく読むといいと思います。

http://jp.php.net/manual/ja/function.preg-match-all.php


3 ● openseed
●10ポイント

より面倒ですが、別の方法(preg_replace_callback)。

※ 文字コードはUTF8に設定されていることを前提にします。

class HogeClass{
var $subject = "あ【いう】えおかき【こく】け【こ】";
var $pattern = "/【(.+?)】/";
var $replacement = "";

var $items = array();
function test1(){
return preg_replace_callback($this->pattern, array(&$this, "parseMatches"), $this->subject);
}
function parseMatches($matches){
$this->items[] = $matches[1];
return $this->replacement;
}
}
$hoge = new HogeClass();
print $hoge->test1();
echo "<hr"."/>";
print_r($hoge->items);
?>

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ