スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[PHP] 文字列中に特定の記号で囲まれた文字列を抽出する

ひょっとしたら標準関数にあったり単純な組み合わせでできそうな気もするのですが、せっかく自作したので、同様のニーズがあったときにまた作り直さなくて済むようにメモ。

文字列中に、なんらかの規則で囲まれる文字列があったとして、それらを抽出するものです。
ただ単に一文字ずつとってきて、開始記号があったらフラグをあげ、フラグがあがっている間じゅうはは取得し続けるというただそれだけのもの。




//======================================================
// 区切り記号(始まり・終わり)のある文字列を抽出する
//======================================================

function GetElementFromString( $sep_s, $sep_e, $str, $enc ){

//検出元となる文字列の長さを取得
$len = mb_strlen( $str, $enc );
//初期化
$flg = 0;
$idx = 0;

//----------------------------------
//文字を1文字ごと取得する
//----------------------------------

for( $i = 0; $i < $len; $i++ ){

//1文字取得
$c = mb_substr( $str, $i, 1, $enc );

//始まり記号があれば印としてフラグに1
if( $c == $sep_s ){
$flg = 1;
}
//記号内であれば(フラグが立っていれば)区切り内文字として格納
if( $flg == 1 ){
$temp .= $c;
}
//終わり記号があれば
if( $c == $sep_e ){
//配列に区切り内文字を格納
$ary[$idx++] = $temp;
//クリア
$flg = 0;
$temp = "";
}
}
return( $ary );
}

//初期化・設定
$str = "隠れてる文字が{ABC}どこかにあるよ! 隠れてる{DEF}文字がどこかにあるよ! 隠れてる文字がどこかに{GHI}あるよ! 隠れ{JKL}てる文字がどこかにあるよ! ";
$result = "";

//関数呼び出し(囲み開始記号、囲み終了記号、文字列、文字コード)
$ary = GetElementFromString( "{", "}", $str, "UTF-8" );

//結果を整形
$result .= "元文字:".$str."<br />\n";
$result .= "<div style=\"color:#008800\">\n";
if( is_array( $ary ) ){
//配列であれば順々に表示セット
for( $i = 0; $i < count( $ary ); $i++ ){
$result .= "[".$i."] - ".$ary[$i]."<br />\n";
}
}else{
//配列でなければそのまま
$result = $ary;
}
$result .= "</div>\n";

//テンプレートをインクルード
include( "void.tmpl" );

関連記事
スポンサーサイト

comment

管理者にだけメッセージを送る

検索フォーム
リンク
最新記事
最新コメント
カテゴリ
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。