• ベストアンサー

文字列に文字を追加したい

phpで特定の場所に特定の文字列を追加したいのですが、どのような方法がありますでしょうか。 具体的には下記のような文字列に /price/ という文字を追加したいと思っています。 /red/2001 /blue/9033 /white/12062 ↓ /red/price/2001 /blue/price/9033 /white/price/12062 /price/を挿入する条件は ・数字の文字列の前に/price/を挿入したい ・数字の桁数は増減する ・/red/や/blue/の箇所は色々な文字列がはいる になります。 どうかよろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
noname#244856
noname#244856
回答No.2

既にある回答で十分ですけど、(個人的に)最適な書き方をしてみます。 echo preg_replace('@/(\\d+)@', '/price/$1', $string);

gogo8999
質問者

補足

どうもありがとうございました。 希望通りにできました。 しかしながら、d+とか$1の意味が全く分かりませんでした。 教えて頂いたリンク先を見ると「正規表現」だと思うのですが、これを理解できるサイトや参考書などご存知でしたら教えて頂けると幸いです。 よろしくお願い致します。

その他の回答 (2)

noname#244856
noname#244856
回答No.3

【サルにもわかる正規表現】 http://www.mnet.ne.jp/~nakama/ 【公式マニュアル】 PCRE目次 http://www.php.net/manual/ja/book.pcre.php パターン構文 http://www.php.net/manual/ja/reference.pcre.pattern.syntax.php パターン修飾子 http://www.php.net/manual/ja/reference.pcre.pattern.modifiers.php ※「$1」に関してはpreg_replaceのページに載ってます。 ※よく使う関数として「preg_match」「preg_match_all」「preg_replace」「preg_replace_callback」が挙げられます。 【注意点】 「PHPとしてのエスケープ」と「PCREとしてのエスケープ」の2つがあることに留意してください。 正規表現で「\」という文字自体にマッチさせたければ、コード上は「\\\\」と書かなければなりません。 コード $pattern = '/\\\\/'; ↓ PHPがPCREエンジンに渡す内容 パターン: \\ ↓ PCREエンジンのパターン解釈後 マッチする文字列: \ 私が敢えて「\d」でなく「\\d」と書いたのはこの理由からです。 「d」はPHPコード上、エスケープが必要な文字ではないので「\d」と書いても正しく動作するのですが、こういった仕様もPHP特有のようです。 他言語使用者がこの仕様を知ったら『「\\d」でないと気持ち悪い』っていう人が多いかもしれません。 たとえばC言語の場合は無視されてしまいます。 http://ideone.com/65136A

gogo8999
質問者

お礼

とても参考になりました。 色々な書き方があるものなのですね。

回答No.1

preg_replaceとか? http://www.php.net/manual/ja/function.preg-replace.php $string = '/red/2001' echo preg_replace('/\/(\d+)/', '/price/$1', $string);

gogo8999
質問者

補足

どうもありがとうございました。 希望通りにできました。 しかしながら、d+とか$1の意味が全く分かりませんでした。 教えて頂いたリンク先を見ると「正規表現」だと思うのですが、これを理解できるサイトや参考書などご存知でしたら教えて頂けると幸いです。 よろしくお願い致します。

関連するQ&A

  • postgreSQLに複数行(改行された)文字列を追加するには

    postgreSQLに複数行(改行された)文字列を追加するにはそうしたらよいのでしょうか? PHPでHTMLからデータを受け取り挿入したいのですが 複数行の文字列を入れるとおかしなことに・・・(汗

  • エクセルで入力済みの1列に同じ文字を追加したい

    エクセルですでに数字が入力された状態のセル1列に同じ文字を追加したい場合、一つひとつ入力せずに一気にできる方法があれば教えて頂けないでしょうか。 例えば、すでに150, 175, 210, 245 などと数字が入っているとして、その末尾にAを入れて、150A, 175A, 210A, 245A のようにしたいのです。それぞれのセルをクリックしてはAを入力するという方法以外に、一気にすべての(選択された)セルにAを追加・挿入する簡単な方法がないでしょうか?ご指導頂けると非常に助かります。宜しくお願い致します。

  • 特定文字列の抽出

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

  • EXCELの文字列の冒頭に0を付けて桁数を合わせたい

    入力した数字「123」を「00123」にしたい時、文字列にすると「123」のまま文字列になってしまいます。 自動的に「00123」にできないのでしょうか?例えば、口座番号や顧客番号など桁数が決まっているもので、その桁数に満たない番号の場合、冒頭に0を付けて桁数を合わせたいのです。 ちなみに、「&」で結ぶことも考えたのですが、00123とか00012など冒頭にくる「0」の数が違うので、別セルに「000」をいれておいてもできないのです。 よろしくお願いします。

  • access テキストボックス内に文字列を追加

    テキストボックス内に文字列を追加したいのですが、 「260文字目に”文字列X”を挿入する」的な事はできますか? テキストボックス内には500文字位あります。 replaceでは都合が悪いのです。 よろしくおねがいします。

  • 制御文字を含む文字列を扱うには

    field char(50) binary not null unique primary key,fulltext (field) この設定で作られたフィールドがあり、主にlike検索をされます。 このフィールドには本来10進数の数字の文字列を入力する事を考えていたのですが、(数値としては桁数が大きすぎる事と、その数字列の中に"123"を持つ物を探すなど数量とは関係無い検索がされる事から文字列にしています) MySQLのリファレンスによると、インデックスの対象になる文字列は桁数が短い方がいいようなので、どうせ数値でなく文字列を使っているのならと思い、1バイトで表現出来る全ての文字を使い256進数で表し、桁数を節約しようと考えました。 256進数に直してしまうと10進数の状態で"ある数字列"を持つのかどうか分からなくなるのではないかと思うかもしれませんが、それはこのフィールドに行われるlike検索の特徴により解消されます。 長い前置きでしたが、質問はタイトル通り制御文字を含む文字列を扱う事、言い換えれば0~255の全ての文字コードを文字列データとしてMySQLでインサート・全文インデックス・セレクトする方法です。このフィールドのデータは出力される事は無く、selectのwhere部分に使われ、出力されるのは同レコード内の別のフィールドのデータです。 素直に以下のコードでテストしましたが失敗しました。 while ($i < 50){ $rand = mt_rand(0,255); $str .= chr($rand); $i++; }/*insertする文字列$strを生成*/ $sql = "insert into table(field) values ('$str')" $strの中に制御文字や"や'等の文字が入るとinsertが失敗し、追加出来たレコードについても、コマンドプロンプトからselectして出力してみるとPCが警告音を連発します。 何か方法は無いでしょうか?

    • ベストアンサー
    • MySQL
  • 複数の数字が書かれた文字列をsplitで分割したい

    "230","60,000","12,800" 等の文字列があります。 これを 「230」と「60000」と「12800」に分けたいのですが Solit(文字列,",")とすると 「230」「"60」「000"」「"12」「800"」 となってしまいます。 数字の個数や桁数はバラバラです。 うまく分ける方法に関してどうかご助言をいただけないでしょうか? どうぞよろしくお願いいたします。

  • PHP 文字列から必要な部分を抜き出したい

    PHP 文字列から必要な部分を抜き出したい こんにちは。 PHP初心者です。(PHP5使用) 実はある文字列から必要な部分を抜き出したいのですが、方法を教えていただけないでしょうか? 文字列: "HTTP/1.1 200 OK Date: Fri, 29 Oct 2010 03:23:55 GMT Server: Apache Content-Length: 111 Connection: close Content-Type: text/plain; charset=UTF-8 TransactionId=000000020513&TransactionDate=20101029&OperateId=1Auth&MerchantFree1=20101029000001&ResponseCd=G65" と、ちょっと複雑ですが、この文字列から、 ・TransactionId=000000020513 ・TransactionDate=20101029 ・OperateId=1Auth ・MerchantFree1=20101029000001 ・ResponseCd=G65 の=以下の部分をそれぞれ抜き出したいです。 例えば「TransactionId」を検索して「000000020513」を抜き出すとか。 それぞれ=の後の文字は可変(桁数も増減)する場合があります。 上7行はいらない文字列ですが、取得時に必ず文字列に入ってきます。 ご教授の程、宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHP 文字列から必要な部分を抜き出したい

    PHP 文字列から必要な部分を抜き出したい こんにちは。 PHP初心者です。(PHP5使用) 実はある文字列から必要な部分を抜き出したいのですが、方法を教えていただけないでしょうか? 文字列: "HTTP/1.1 200 OK Date: Fri, 29 Oct 2010 03:23:55 GMT Server: Apache Content-Length: 111 Connection: close Content-Type: text/plain; charset=UTF-8 TransactionId=000000020513&TransactionDate=20101029&OperateId=1Auth&MerchantFree1=20101029000001&ResponseCd=G65" と、ちょっと複雑ですが、この文字列から、 ・TransactionId=000000020513 ・TransactionDate=20101029 ・OperateId=1Auth ・MerchantFree1=20101029000001 ・ResponseCd=G65 の=以下の部分をそれぞれ抜き出したいです。 例えば「TransactionId」を検索して「000000020513」を抜き出すとか。 それぞれ=の後の文字は可変(桁数も増減)する場合があります。 上7行はいらない文字列ですが、取得時に必ず文字列に入ってきます。 ご教授の程、宜しくお願い致します。

  • Excelで下記のようなセルから文字列を取り出す

    [文字列1(字数ランダム)][数字(桁数固定)][文字列2(字数ランダム)][文字列3(字数固定)] 1つのセルに上記のような文字列がはいっています。 それぞれの文字列や数字の境目にはスペースやカンマなどはありません。 このセルから文字列2だけを取り出す方法はあるでしょうか? ご教示お願いいたします。

専門家に質問してみよう