- 締切済み
文字列関数について
よろしくお願いします。 「abcdefghijklmn」 このような文字列から dとjので囲まれた文字列「defghij」を 抜き出したい場合はどうすれば良いでしょうか? 正規表現を使用するのでしょうか? 便利な関数や方法がありましたら教えてください。 お願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- tokuse
- ベストアンサー率35% (6/17)
#1のtokuseです。 実は先に言っておきますとPHPは普段使っていないので、正しくは無いかもしれません。ごめんなさい。 でも関数を調べて回答してみます。 ひとつの文字列からいくつあるか分からないd*jを抜き出すことになるので、まずは受け皿になる変数は配列にしておきましょう。 その上で、jでsplitします。jがなければ$str_listにはFALSEが入るようです。jで切るときにaajbbbjccならば、aaとbbbとccの三つのデータに切り分けられることを押さえておきます。 次にラストを除くすべての$str_listの要素においてd*を検索して、合ったら最後にjを付けて検索結果の配列に入れていく。 これで要望を満たせるような気がしますが、如何でしょうか?
- Marionette
- ベストアンサー率56% (42/74)
>「abcdefghijklmn abcdxxxxxjklmn」 >このような文字列から >dとjので囲まれた文字列「defghij」と「dxxxxxj」を 普通に正規表現を使用すると 「defghijklmn abcdxxxxxj」になってしまいますよね。 処理したい文字列がサンプルのように、間にスぺースがあるなど、決まった法則があるなら方法があるでしょうが、そうでないなら正規表現では難しいのではないでしょうか。 #1の方が回答されているように、スマートではありませんが、strstrや strposで先頭から順に評価していくらいしか思いつきません。
- redraft
- ベストアンサー率16% (9/55)
'd*j'のパターンで検索するのが早いと思います。 'd*j'は正規表現って・・・ result = ereg('(d)*(j)', $mojiretsu, $hairetsu); だったかな? 正規表現が正しければ$hairetsuに見つかったパターンが 配列として入ってるはず。 本かネット見ながら試してみて下さい。
- tokuse
- ベストアンサー率35% (6/17)
関数で書くとすれば、 文字列から"d"の位置を調べて、 その位置以降の文字列だけを抜き出す。 新しく抜き出した文字列から "j"の位置を探し、その位置前までの文字列を抜き出す。 こんな方法もあると思います。 ところで言語は何をお使いですか?
お礼
補足です。お礼の欄に書いてしまってすみません。 dからjの文字列を抜き出すのは 正規表現を使用することでとりあえず実現できました。 ですが下記の場合にどうするか わからなくて困っています。 「abcdefghijklmn abcdxxxxxjklmn」 このような文字列から dとjので囲まれた文字列「defghij」と「dxxxxxj」を 抜き出したい場合です。 よろしくお願いします。
補足
言語はPHP4です。 よろしくお願いします。