指定した位置で文字列を分ける方法

このQ&Aのポイント
  • 文字列を指定した位置で分ける方法について教えてください。
  • 例えば、文字列 'a/bb/cccc/d/e' があり、前から3つ目の'/'で文字列を分けたい場合、どのようなやり方がありますか?
  • 結果的に、'a/bb/cccc' と 'd/e' の2つの文字列に分けることができれば良いです。
回答を見る
  • ベストアンサー

指定した位置で文字列を分けたい

例えば $mojiretu = 'a/bb/cccc/d/e'; という文字列があったときに、'/'で区切って指定した位置で文字を分けたい場合に $wk = 'a/bb'; なら $arr = split('/', $wk);//$arr[0]・・・'aa' $arr[1]・・・'bb' で簡単に分けられますが、上の$mojiretuのような区切る文字('/')が たくさんあった場合に、前から3つ目の'/'で$mojiretuの中の文字列を2つに分けたい というような処理がしたいのですが、どのようなやり方があるのでしょうか? [希望する結果] $mojiretu = 'a/bb/cccc/d/e'; 前から3つ目の'/'で分ける $arr[0]・・・'a/bb/cccc' $arr[1]・・・'d/e'

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

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

  • ベストアンサー
  • suzuki-_-
  • ベストアンサー率77% (152/195)
回答No.1

正規表現の使える preg_split を利用してみてはいかがでしょうか <?php $mojiretu = 'a/bb/cccc/d/e'; $arr = preg_split("#^([^/]*/[^/]*/[^/]*)/#",$mojiretu,-1,PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); print_r ($arr) ;// Array ( [0] => a/bb/cccc [1] => d/e ) ?> ^([^/]*/[^/]*/[^/]*)/ 部分の正規表現パターンで区切ります 'a/bb/cccc/d/e' で上記に当てはまるのは、わかりやすく括弧もつけると '(a/bb/cccc)/' の部分です 前から3つ目の'/'を表すために、前から3つ目の'/'までの全てを 区切りとして指定することになります ただこれだけで区切り終えてしまうと ''(空文字) と 'd/e' になってしまいます そこで、PREG_SPLIT_DELIM_CAPTURE フラグを付けて、 正規表現で括弧内部分にマッチした内容も返すようにしています そうすると、''(空文字) と 'a/bb/cccc' と 'd/e' に分けられます 空文字が邪魔なので、PREG_SPLIT_NO_EMPTY フラグを使い 空文字は返さないようにして前途記述のできあがりです 詳しくは下記を参照してください - preg_split http://au.php.net/manual/ja/function.preg-split.php - パターン構文 http://au.php.net/manual/ja/reference.pcre.pattern.syntax.php

takagoo100
質問者

お礼

ご返答ありがとうございます。 そのやり方でできました。ありがとうございます。

関連するQ&A

  • A列にあったものには1、C列にあったものには2

    シート1の内容をVBAをつかってシート2のようにしたいです。 つまり、シート1の2行目以降のデータをシート2のB列につなげて、 A列には シート1の1行目に記載している番号をふっていきます。 もともとA列にあったものには1、C列にあったものには2、E列にあったものには3と振りたいのですが、どのようにマクロを書けばいいでしょうか? [Sheet1]   A  B  C  D  E 1 1  2  3 2 aa aaa aaaa 3 bb bbb bbbb 4 cc cccc 5  dddd ----------------------------- [Sheet2] A B 1 1 aa 2 1 bb 3 1 cc 4 2 aaa 5 2 bbb 6 3 aaaa 7 3 bbbb 8 3 cccc 9 3 dddd

  • Excel特定文字抽出の関数を教えてください。

    Excelの特定文字からはじまる文字列を抽出したいです。 aa/bb(aa/は固定ですがbbは文字数を含めて可変します) また、aa/bbの前後にはほかの文字列(ccccやdddddなど)が入っています。 下記のような感じですが、aa/*****だけを抽出し何件あるか調べたいです。 最終的に結果のようにしたいのですが、関数かマクロを教えていただけますでしょうか? よろしくお願いします。 ・シート A1 ccc aa/bb ddddd     B1 gada aa/fasd haadf A2 rrrr aa/cccc nnaxxx B2 hjhafd aa/bb hfahfdha ・ ・ ・ ・結果 件数 aa/bb 2 aa/cccc 1 aa/fasd 1

  • Excelの文字列関数について

    Excelの文字列関数について こんにちは。Excel2007を使用しています。 先日、こちらで質問させていただいた【QNo.5785641】の続きになるのですが・・・ セルの中にある特定の文字が含まれている場合は、ある文字の後ろの数値を抽出したいという質問で、 例えば、セルA1に『AA-11 $100.00』、A2に『BB $ 95.00』と入力されている場合、『AAという文字が含まれている場合はB1に$マークの後ろの数値を抽出、BBという文字が含まれている場合はC1に$マークの後ろの数値を抽出する』というものを関数を使用して作りたいというものに対し、 =IF(COUNTIF(A1,"*AA*")=1,RIGHT(A1,LEN(A1)-FIND("$",A1)),"") =IF(COUNTIF(A1,"*BB*")=1,RIGHT(A1,LEN(A1)-FIND("$",A1)),"") という回答をいただきましたが、さらに追加で質問です。 例えば、セルA1に『AA-11 $100.00 aabbcc』、A2に『BB $ 95.00 abc』というように、抽出したい数値の後ろにも文字が入力されている場合はどのようにしたらよいのでしょうか? 宜しくお願いします。

  • 文字列をSplitを使って区切りたい。 ","

    "," で区切られた文字列をSplitを使って区切りたいのですが。 例. "abc","123d","fr44","1erg" Dim Arr_Koumoku as string() Dim delimiter as string delimiter = Chr(34) & Chr(44) & Chr(34) 'delimiter = """,""" "← これでも結果は同じだった Arr_Koumoku = Arr_Kaigyo(i).Split(delimiter) とやると。 Arr_Koumoku(0) =   Arr_Koumoku(1) = abc Arr_Koumoku(2) = , Arr_Koumoku(3) = 123d Arr_Koumoku(4) = , Arr_Koumoku(5) = fr44 Arr_Koumoku(6) = , ・・・・ と区切られてしまいます。 Arr_Koumoku(0) ="abc" Arr_Koumoku(1) ="123d" Arr_Koumoku(2) ="fr44" Arr_Koumoku(4) ="1erg" としたいのですが。アドバイスを頂けたら幸いです。 開発環境 WindowsXP SP2 Visual Studio 2005 Standard Edition SP1

  • このような文字列

    検索エンジンで検索してそれから戻るボタンで戻るとキーワードフォームにこのような文字列が・・ %E7%A2%BA%E8%AA%8D%E3%81%8F%E3%82%93 パソコンが壊れたのでしょうか?

  • 文字列から指定した文字を取り出す

    たとえば $test = "■-●-△-★-■■-■-■"; という文字列があったとして、 -で文字を区切り、■■は含めず■のみを取り出したい場合、 どのようにしたらいいのでしょうか。 $split = split("-",$test); $count_split = count($split); for($i=0; $i < $count_split; $i++){ if($split[$i] == "■"){ echo "{$split[$i]}"; } } としていますが、もっとスマートにできないのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 特定の文字列を含む値を合計したい

    現在このような表を作成しています A列    B列  C列  D列  E列  F列    G列 コード名  回数  費用  回数  費用  回数合計  費用合計 AA01    4 200 5 300  =SUM(B3+D3) =SUM(C3+E3) BB03 4 300 6 400  SUM.... SUM.... CC02 3 300 5 400 DD99 3 550 3 400 AA03 2 350 4 500 BB04 8 400 3 250 EE04 2 300 3 200 この状態で、A列の下に、AA合計とBB合計というコードを作成したいのです。 AAというコードとBBというコードはある時と無い時が存在します。 上記の例だとEE04の下に、AA01とAA03の回数費用の合計用のAA合計とBB03とBB04の回数費用の合計用を作成したいのです。 AA合計 6 550 9 800 BB合計 12 700 9 650 値としてはこんな感じで合計値として出したいです。 コードが存在するときと存在しないときがありますが、可能でしょうか?教えてください

  • 文字列の分割について

    VB初心者です。 以下のように文字列を分割したいのですが <やりたいこと> MOJI="A","B","C,D,E" ↓ ARRAY(0)="A" ARRAY(1)="B" ARRAY(2)="C,D,E" ARRAY=SPLIT(MOJI,",") ではだめですよね。 何か、簡単なやり方はありますか? よろしくお願いします。

  • ■str_split()で指定した文字数ではなく、指定した文字までを配列に入れることは可能ですか?

    いつもお世話になっています。 文字列を配列に入れようと思って、str_split()を調べました。 $str = "Hello Friend"; $arr = str_split($str, 3); print_r($arr); の結果は Array ( [0] => Hel [1] => lo [2] => Fri [3] => end ) になりますよね?これを $str = "今日はいい天気です。遠足に行きましょう。楽しかったですね。"; としたときに、「。」までを区切りとして配列に入れることは可能でしょうか? つまり、この後何かしらのことをして、 print_r($arr); をすると、以下のように出力されるようにしたいのです。 今日はいい天気です。 遠足に行きましょう。 楽しかったですね。 str_split()で指定した文字数ではなく、指定した文字までを配列に入れることは可能でしょうか?

    • ベストアンサー
    • PHP
  • EXL指定した文字列リストと同一を指定セルに表示

    下記のようなエクセルデータになっています。 表示の関数についてご教授願いますようお願いいたします。 上部の検索条件です(50行くらいあります) A列   B列   C列   D列   E列   F列 a     a     a     b     c 1     1    1     3     1 下部のフィールドです(数百行あります A列   B列   C列   D列   E列   F列 a     a     a     b     c 1     1    1     3     1 2     2    2     E     2 表示したい条件 A列   B列   C列   D列   E列   F列 a     a     a     b     c 1     1    1     3     1 2     2    2     E     2 F列のセルにD列と同じ文字列がある場合、文字列又は”○”で 表示出来たらと思います。 よろしくご教授のほどお願いいたします。

専門家に質問してみよう