• ベストアンサー
  • すぐに回答を!

文字列の抽出について

こんにちは。お世話になっております。 DBに登録のあるデータを呼び出した際、長文データは切り捨てて表示したく、mb_strimwidth関数を使っているのですが、そのデータの中には、[a:1]といったような文字列を含んでおり、データを出力する際、ereg_replace関数を用い、 [a: の部分を<img src=\"../images/"; ] の部分を.gif\"> などといった流れで、[a:1]から画像を呼び出すようしているのですが、冒頭にご説明したように、mb_strimwidth関数を用いるので、呼び出される[a:1]の文字列が分割されることもあり(変換しきれない)、結果的に<img src="../images/ で止まってしまうことになり、>で閉じることが出来ずに、他のHTMLソースに影響し、レイアウトがズレテしまう状況になってしまいます。 少し判り難い説明かもしれませんが、以上のような流れを考えた場合、その対策や、他にいいやり方などあるのか、アドバイスいただければと投函させていただきました。 自分でも色々考え試行錯誤をしていますが、非効率であったり、結局のところ上手くいかなかった利としている状況です・・。 お忙しい中恐縮ですが、ヒントなど何でも結構です。アドバイスをいただければ幸いです。以上宜しくお願いいたします。(当方PHP5を利用)

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数39
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.2
  • yambejp
  • ベストアンサー率51% (3827/7415)

正規表現で変換してみては? 途中で切れる場合は変換されないので <? $str1="test[a:1]test[a:2]test"; $str2=preg_replace("/\[a:(.*?)\]/mis",'<img src="../images/\1.gif">',$str1); print $str2; $str3="test[a:1]test[a:"; $str4=preg_replace("/\[a:(.*?)\]/mis",'<img src="../images/\1.gif">',$str3); print $str4; ?> 切れた場合に[aをどうしたのかにもよりますのね・・・ 結局は[aと表示されてしまうのでかっこつかないし

共感・感謝の気持ちを伝えよう!

質問者からのお礼

yambejp様 こんばんは、いつもお世話になっております。早速のアドバイスを有難う御座います! >結局は[aと表示されてしまうのでかっこつかないし いや、、実は今日一日中考えていたので、仮に最後に[a:と出たとしても、もの凄い進歩です!(私が進歩というのではなく、表示結果という意味です。汗) 正規表現って使い方次第なのですね。有難う御座いました!

その他の回答 (1)

  • 回答No.1

わかりにくいので解釈を書きます。 つまりこの様な文字列を↓ 文字列:あいう[a:]えおかきくけこ 変換後:あいう<img src=\"../images/"hoge.gif\">えおかき... ↑こうしたいと言う事でいいんでしょうか? それで時々 文字列:さしすせそ[a:]たち 変換後:さしすせそ<img src=\"../images/"hoge... ↑こうなってしまうと 解決案として 文字列:さしすせそ[a:]たち 1.split関数で「さしすせそ」と「たち」に切り分ける。 2.後半の「たち」だけにmb_strimwidth関数を適用し 3.[a:]を変換する。 4.1.2.3を結合して表示。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

calltella様 はじめまして、こんばんは。早速のアドバイスをありがとう御座います! 説明が上手くなくて申し訳ありません。 calltella様が仰るように確かにそのような形なのですが、 あいう[a:1]えおかきくけこ[a:2]さしす[a:3]せそ と、a: のあと違う番号のものがいくつもあり、split関数で切り分けるにしても、その番号の種類の数だけ切り分ける?などと、スキルの無い私には、split関数を使っての効率の良いスクリプトが描けませんでした。(実はこの関数、初めて使い方を知りました。汗) 今回、#2の方のスクリプトで解決できましたが、以上は決して文句ではなく、報告を兼ねてのご連絡です。今回の解決(実装)には直接的に結びつけることは出来ませんでしたが、考え方など貴重なアドバイスを頂戴出来たと感謝しております。有難う御座いました。

関連するQ&A

  • Excelから任意の文字列を抽出したい

    A列にリンクのタグがあるのですが、このような文字列から【リンク先】という部分と、【<img src="" alt="">】の部分だけを取り出したいと思いますが、上手く出来ません。 A列に入っているタグは→<a href="リンク先" target="blank"><img src="" alt=""></a> A列にリンクのタグが入っています。 B列に【リンク先】 C列に【<img src="" alt="">】 となるようにしたいです。 又A列の文字列には、<img src="" alt="">が続いて2つか3つ入っているものもありますが、その場合は、D列・E列に順番に抽出したいです。 最大でも<img src="" alt="">は4つまでしか入っておりません。 ダブルコーテーションの扱いなどがよく分からなくて、詳しかたいれば教えていただけるとありがたいです。 よろしくお願いいたします。 ※【】はわかりやすくするためのものです。

  • 文字列の抽出

    <img src="../photo/e/idx/idx_eizansumire-0404183.jpg" width=90 height=90 border="0"> 上記のような文字列から、下記の部分だけ抽出したいのですが、どうしたらできますか。 抽出する部分以外は、前後とも固定です。 /e/idx/idx_eizansumire-0404183.jpg よろしくお願いします

    • ベストアンサー
    • Perl
  • 目的の文字列を取得するには?

    ×××× 2011年10月6日 ×××××× というような文字列から日付の部分を取り出そうとしています。 if (mb_ereg("([0-9]{4})年([0-9]{2,})月([0-9]{2,})日",$string,$result)){ echo $result; } という方法で取得しようとしているのですが、失敗します。 半角数字と全角の漢字が混在しているような文字列から、目的の部分を取得する にはどうすればいいでしょうか?

    • ベストアンサー
    • PHP
  • エクセルの文字列で似たものを抽出する

    いくつかあるエクセルの文字列のうち, 一番にてる文字列を抽出する方法を教えてください. たとえば,画像のように入力してある30通りの文字列のうち, ★の文字列に一番似ている文字列は1~30番の文字列のうちどれか, を知る方法について,具体的に教えていただけると嬉しいです. 関数は,不得意なのを踏まえて,教えていただけるとなお嬉しいです. どうぞよろしくお願いします.

  • エクセルの""の入った文字列を抜く関数をどうか、お教え下さい。

    エクセルの""の入った文字列を抜く関数をどうか、お教え下さい。 エクセルの初心者です。 どうか皆様お知恵をお貸しください。 下記の様な場合どうやったら、 <img src="http://★/●●.gif"> を <img src="http://★/●●1.gif"> に 置換をしたいのですが、SUBSTITUTEの関数では、 上手くいきません。 本当に、初歩的なことなのですが、 どなたかこのような場合、どうしたらいいのかを お教え願えませんでしょうか? また、エクセルでは、解決できない場合、 どうやったら解決出来ますでしょうか? わがままを、申し上げてすみませんが、 サルでもわかりますような回答を頂けたら、恐縮です。 何卒、宜しくお願いします。

  • ■近似している文字列を抽出したい

    エクセル内に数万件のレコードが書き込まれています。 登録されているデータの品質をチェックしたいため、 特定の列を参照し、類似しているデータは一括で抽出したいと考えています。 エクセルの関数だけに限った際、 下記のようなやり方があるかと思いますが、 一括で抽出することができないためお知恵をいただきたい所存です。 現在のチェック方法 (1)B2のリンゴをA1にコピーし、C列はA1とB列の文字列の適合率を表示する。 (2)C列の適合率が高いもの(仮に90%以上適合した文字列)を目検でチェック (3)B3以降をA1に順次コピーして(1)~(2)のチェックを行う        |A列    |B列    |C列 1      |リンゴ  |       | 2      |      |リンゴ   |100% 3      |      |すいか  |0% 4      |      |もも    |0% 5      |      |すもも   |0% 6      |      |メロン   |33% 7      |      |生ハム  |0% 8      |      |おリンゴ |100% ■ご質問させていただく内容 ・近似した文字列の適合率を一括で調べるもしくは抽出するツールをご存知でしょうか? ・もしくは、上記に記載した内容をマクロで組むことができるでしょうか? 例えば以下のような流れです。 ※上図を参考に説明 (1)Sheet1のB2の文字列の適合率をB2:B8まで順次計算してC列に代入 (2)Sheet1のC列を参照し、B2の行以外で適合率が90%以上の場合、Sheet2のA列に代入 (3)B3~B8まで(1)~(2)の処理を繰り替えす。 ※参考になるサイトやプログラムなどをご教示いただければ幸いです。 よろしくお願い致します。

  • 特定文字列の抽出

    VB6の質問です。 桁数、データが不定の文字列中から特定文字を抽出したいのでが、方法を教えていただけないでしょうか? 抽出したいデータの桁数が毎回不定でMid, Left, Right関数が使用できません。 Dim Buffer As String Buffer = "A12345...B678910.TRAGET..C" '桁数、データが不定の文字列がBufferに入ります。 例えば、変数Bufferから、桁数を考慮しないで"TARGET"の文字列を抽出したのです。 InStr関数で、位置を特定して、Mid関数などで抽出するれば、良いと思うのですが これをどんな桁数のときも対応できるようにルーチン化にできないでしょうか?

  • 文字列から文字列を検索するプログラム

    現在、C言語を学習しています。 文字列から文字列を検索する関数に「strstr]がありますが、自作関数として自分で作成する方法を考えております。 文字列から文字を検索する事は出来たのですが、文字列を検索するシーケンスがわかりません。 有識者の方、御教授よろしく御願い致します。

  • 文字列から数値を抽出したいのですが・・。

    文字列から数値(integer型)を抽出したいのですが、うまくいきません。 val関数だと文字の途中の数値が判別できないし、困っています。 よろしくお願いします。 ※以下、文字列と数値の関係です。 ・"文字列" → 抽出したい数値  "0k,abc,5k,abc3.0" → 0530  "abc()_3t" → 3

  • EXCELで文字列にセルの内容を組み込む方法

    EXCElで Aの列に商品コード(数字やアルファベット+数字) Bの列に簡単なHTMLタグがありまして BのHTML内にAの商品コードを取り込みたいのですが、どういう関数?を使えばできますでしょうか? BにはURLを含んでいますので「””」(ダブルコーテション)があります。 イメージ的にはこのような感じです。 ------------------------------------------------------------------------------  A        B 0001    <img src="http://****.jp/****-◆◆◆_1"><img src="http://****.jp/****-◆◆◆_2"> ------------------------------------------------------------------------------ ◆のところにAの文字列を組み込みたいのです。 どなたかご存知の方、ご教授ください。 どうぞよろしくお願いします。