• 締切済み

文字列関数について

よろしくお願いします。 「abcdefghijklmn」 このような文字列から dとjので囲まれた文字列「defghij」を 抜き出したい場合はどうすれば良いでしょうか? 正規表現を使用するのでしょうか? 便利な関数や方法がありましたら教えてください。 お願いいたします。

みんなの回答

  • tokuse
  • ベストアンサー率35% (6/17)
回答No.4

#1のtokuseです。 実は先に言っておきますとPHPは普段使っていないので、正しくは無いかもしれません。ごめんなさい。 でも関数を調べて回答してみます。 ひとつの文字列からいくつあるか分からないd*jを抜き出すことになるので、まずは受け皿になる変数は配列にしておきましょう。 その上で、jでsplitします。jがなければ$str_listにはFALSEが入るようです。jで切るときにaajbbbjccならば、aaとbbbとccの三つのデータに切り分けられることを押さえておきます。 次にラストを除くすべての$str_listの要素においてd*を検索して、合ったら最後にjを付けて検索結果の配列に入れていく。 これで要望を満たせるような気がしますが、如何でしょうか?

回答No.3

>「abcdefghijklmn abcdxxxxxjklmn」 >このような文字列から >dとjので囲まれた文字列「defghij」と「dxxxxxj」を 普通に正規表現を使用すると 「defghijklmn abcdxxxxxj」になってしまいますよね。 処理したい文字列がサンプルのように、間にスぺースがあるなど、決まった法則があるなら方法があるでしょうが、そうでないなら正規表現では難しいのではないでしょうか。 #1の方が回答されているように、スマートではありませんが、strstrや strposで先頭から順に評価していくらいしか思いつきません。

  • redraft
  • ベストアンサー率16% (9/55)
回答No.2

'd*j'のパターンで検索するのが早いと思います。 'd*j'は正規表現って・・・ result = ereg('(d)*(j)', $mojiretsu, $hairetsu); だったかな? 正規表現が正しければ$hairetsuに見つかったパターンが 配列として入ってるはず。 本かネット見ながら試してみて下さい。

  • tokuse
  • ベストアンサー率35% (6/17)
回答No.1

関数で書くとすれば、 文字列から"d"の位置を調べて、 その位置以降の文字列だけを抜き出す。 新しく抜き出した文字列から "j"の位置を探し、その位置前までの文字列を抜き出す。 こんな方法もあると思います。 ところで言語は何をお使いですか?

BottleCap
質問者

お礼

補足です。お礼の欄に書いてしまってすみません。 dからjの文字列を抜き出すのは 正規表現を使用することでとりあえず実現できました。 ですが下記の場合にどうするか わからなくて困っています。 「abcdefghijklmn abcdxxxxxjklmn」 このような文字列から dとjので囲まれた文字列「defghij」と「dxxxxxj」を 抜き出したい場合です。 よろしくお願いします。

BottleCap
質問者

補足

言語はPHP4です。 よろしくお願いします。

関連するQ&A