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

ヒットする初回のみ置換する方法

あいうえおかきくけこあいうえおあいうえお という文字列があった時、 初回の「あいうえお」のみ空に置換して かきくけこあいうえおあいうえお としたいのですが、str_replace()だと全部置換されてしまいますし、 preg_replace()やmb_ereg_replace()ではうまく置換されません。 対象とする文字列は、実際はHTMLタグやマルチバイトが混じっています。 置換するべき文字列は、全く同様のものが対象文字列内にも必ず含まれています。 preg_replace()やmb_ereg_replace()でも可能なのかもしれませんが、 どうやればいいのか分かりませんでした。 どなたかご教示下さい。

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

  • 回答数1
  • 閲覧数647
  • ありがとう数0

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

  • ベストアンサー
  • 回答No.1

> str_replace()だと全部置換されてしまいますし、 > preg_replace()やmb_ereg_replace()ではうまく置換されません。 preg_replace/mb_ereg_replace でも全置換になりそうな気がするのですが どのように「うまく置換されなかった」のでしょうか? それはさておき、 mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit [, int &count]] ) のように、省略可能な引数の中に limit subject 文字列において、各パターンによる 置換を行う最大回数。デフォルトは -1 (制限無し)。 というのがありますので、ここに1を設定して実行すればよいのではないでしょうか?

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

質問者からの補足

なんか色々試していたら、以下で出来ました。 $str = '<a href="aaa.html">あいうえお</a>かきくけこ<a href="aaa.html">あいうえお</a>'; $var = '<a href="aaa.html">あいうえお<\/a>'; //先に色々処理した結果 $str = preg_match("/".$var."/", "", $str, 1); 最初に試してみた時にはエラーも出ず置換もされず、だったのですが、 その時の状態が既にもうない為再現する事が出来ませんでした。 上記で可能である事が分かりましたが、色々処理した結果に特殊文字を エスケープしてあげないといけないので、素直に文字数を取得して mb_substr()させるようにしようかと思います。 スピード的にどっちが早いのか分かりませんが。 ありがとうございました。

関連するQ&A

  • PHPの置換方法

    <?php $begin = 'あいうえおかきくけこさしすせそ'; $replace = 'か*'; $last = ''; $word = str_replace($replace, $last, $begin); php> 以上のようにプログラムを組んで$wordの出力を『あいうえお』のように『か』以降をすべて空白で置換というプログラムを作りたかったんですがうまくいきませんでした。指定した文字列以降を全部置換するには*は使えないんでしょうか?また、ほかに方法があればアドバイスをいただけるとうれしいです。

    • ベストアンサー
    • PHP
  • PHPの正規表現で【】内を文字列ごと削除

    あいうえお【かきく】けこさ。【しすせそ】 といった感じの文字列を、【かきく】や【しすせそ】を削除して、 ”あいうえお けこさ。” としたいのですが・・・ $str = preg_replace("【.*】"," ",$str) とすると、 あいうえお ってなっちゃうし、 $str = preg_replace("/【.{1,5}?】/"," ",$str) とかやってみても上手く行かず。 はて?「/」は何を意味するのだろう。とか思いながら試行錯誤してはみてるのですが・・・ どなたかご教授くださいませんでしょうか。 お願いします。

    • ベストアンサー
    • PHP
  • 絶対表記の置換

    $hoge=preg_replace("/\[<.*>\]/",'(((blank)))',$hoge); と、[< >]で挟まれた間を(((blank)))という文字列に置換しています。 ああああ[<aaaa>]あかさたな あいうえお[<vvvvv>] だと上手くいくのですが、 ああああ[<aaaa>]あかさたな[<hogehoge>] あいうえお[vvvvv] だと、表示結果は ああああ あいうえお となってしまい、一行に複数ある場合、最初の置換の段階で残りの文字列が消えてしまいます。 一行に1つの場合ですと、中間にあったとしても綺麗にそこだけ消えてくれるので大変重宝しているのですが、2つ以上の場合の解決法を教えていただきたく思います。

    • ベストアンサー
    • PHP
  • 正規表現で全角数字を半角数字に置換する方法は?

    いつもお世話になっております。 テキスト内の全角数字5桁のみを該当の半角数字5桁に置換する方法を探しています。 OS:Win テキストエディタ:sakuraエディタ、秀丸 例) ---------------------------------------- あいうえお01234かきくけこ99さしすせそ ↓ あいうえお01234かきくけこ99さしすせそ ---------------------------------------- 正規表現で行えばいいと思い、置換文字列を  [0-9][0-9][0-9][0-9][0-9] あるいは  [0-9]{5} にしましたが、置換後の文字列が分かりません。 試しに検索で上記の文字列を試すと、該当箇所がマークされるので、 置換前の文字列は合っています。 置換後の文字列をご教授願えますでしょうか。 ※テキストエディタで無理ならプログラム組みます。 VBScriptを考えていますが、他に良い言語があれば併せて教えてください。

  • VBScriptで文字列置換

    VBScriptで文字列置換をさせたいので コーディングをご教授ください。 ----------------------------------------------- 置換前 あいうえお@,@aaaaaaaa@,@5648941248@ かきくけこさし@,@bbb@,@15249511456664654654@ 置換後 あいうえお@,@aaaaaaaa@,@111@ かきくけこさし@,@bbb@,@111@ ----------------------------------------------- 最後の@で囲まれた部分の数字を全て111にしたいのです。

  • テキストエディタでの置換するテクニック

    テキストエディタの置換のテクニックを知ってるだけ教えて下さい。 今までは ------------ あいうえお かきくけこ ------------ 「あいうえお」→「さしすせそ」という感じでしかつかってませんでしたが 例えば「あ」から始まって「お」で終わる文字列を指定して置換する方法などはないのでしょうか? ------------ あいうえお あうけいお あでいすお あぢけぢお ------------ 「あ~お」→「あいうえお」と一括置換するだけで ------------ あいうえお あいうえお あいうえお あいうえお ------------ となってほしい時が多々あります。

  • wordのワイルドカードを使用しての置換について

    word2007を使用しています。 置換を簡単に行うために、ワイルドカードを使用したいのですが、どのような指定をしたらよいでしょうか。お知恵をお貸しください。 やりたい内容は次のようなものです。 ・行頭から始まる「文字列1(文字列2)」のような形を見つけ、文字列1の前に★をつける。 (例)下記のような<文章1>を<文章2>のように置換する。 <文章1> あいうえお(かきくけこ) さしすせそ たちつてと あああ(いいい) ううううう えええ(おおお) <文章2> ★あいうえお(かきくけこ) さしすせそ たちつてと ★あああ(いいい) ううううう  えええ(おおお) よろしくお願いいたします。

  • UTF-8 の特定の文字について

    こちらのページで公開されている http://www.tatamilab.jp/rnd/archives/000390.html#i php版 - NgramConverter の59~61行に、 $string = mb_ereg_replace("^(\s|縲)+","",$string); $string = mb_ereg_replace("(\s|縲)+$","",$string); $str_array = preg_split("/(\s|縲)+/",$string); という処理があります。 \sの後の文字列(バイナリではE7B8B2、C280らしい)の意味がわかる方いらっしゃいますか

    • 締切済み
    • PHP
  • 【PHP】ereg() で文字種判定するときエラーになる

    PHP5使用者です。 ereg() でよくわからないエラーに直面して悩んでおります。 例えば、サンプル文字列が半角数字a~z又は -(ハイフン)のみで構成されているか調べたい場合、以下の方法を試しました。 1)if( ereg("^[\-a-z]+$", $str )){ 2)if( ereg("^[a-z-]+$", $str )){ 3)if( mb_ereg("^[\-a-z]+$", $str )){ 4)if( preg_match("/^[\-a-z]+$/", $str )){ 但し $str はシングルバイト文字です 結果、1)のみエラーになります。-をエスケープしているのになぜでしょうか? 文字コードはShift_JIS、EUC-JP、UTF-8とも試しましたが同じでした。そもそも常にマルチバイト関数を使うべきとか…? 解説していただける方、よろしくお願いいたします。

    • 締切済み
    • PHP
  • 置換について

    エクセルで、重要な語句に対して部分的に色付けされた文章が記載されたセルがあるとします。 そのセル内の文字列を、ctrl+FやReplace関数を使って置換をかけた場合、色付けした文字列がすべて黒に変わってしまいます。 置換対象文字列以外は、置換前の状態のまましたいのですが、どなたかその方法についてご存知の方いらっしゃらないでしょうか? ぜひ、ご教授願います。