• ベストアンサー

カンマ区切りの数字で指定したものだけを取り出したいです。

カンマ区切りの数字で指定したものだけを取り出したいです。 $test = "1,2,3,5,10,11,14" という文字列から、1だけを取り出したい場合、どうしたらよいのでしょうか。 preg_match_all("/(?<!1)1(?!1)/",$test,$match); print implode($match[0]); としてますが、なぜか10,11,14と1が含まれるもの全てが表示されてしまいます。

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

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

先読み戻り読みを勘違いしているのかと・・・ こんな感じで? <? $test = "1,2,3,5,1,10,11,14,1"; $pattern="/(?<=^|,)1(?=,|$)/"; preg_match_all($pattern,$test,$matches); print_r( $matches); ?>

hukazuo
質問者

お礼

ありがとうございました。 無事、解決できました!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

単純に単語区切りの\bを利用し、 preg_match_all('/\b1\b/',$test,$match);

hukazuo
質問者

お礼

ありがとうございました。 単純ミスですね^^;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • カンマ区切りの文字列を検索する

    「1,2,3,5,10…」のようにカンマ区切りになっている文字列が格納されているカラム(number)があり、その文字列に含まれている数字と検索用配列「1,2,3」と比較して存在すれば抽出するみたいなことがやりたいのですがよくわかりません。 カンマ区切りではなく単一の数字であれば select * from tests where number IN(1,2,3); みたいな感じでnumberがIN()のなかにあるかどうかで抽出できると思うのですが、この場合はどのようにすればよいのでしょうか。 ちょっと説明が下手でわかりづらいかと思いますがよろしくおねがいします。

    • ベストアンサー
    • MySQL
  • preg_matchでの コンマ について 

    phpでの正規表現で 「もしも変数$wordへ入力した文字列が Japan's という文字列に一致すれば」というスクリプトを作成しましたが、うまくいきません。 if(preg_match("/japan\'s/i",$word,$match)){ この Japan's における カンマの取り扱いを このケースではどうしたらいいかよくわかりません。 \' としてみましたが、うまくいきません。 なにかアドバイスやヒントがありましたら、よろしくお願いします。 ああでもない、こうでもないとやってみましたが、その過程で 唯一 Japan's にヒットしたのは、次のスクリプトでした。 if($word=="japan\'s") ただし、これは正規表現は使っていないわけですよね。 なにか、自分のローカル環境に問題があるのかと思い、レンタルサーバーに同じものをuploadして試して見ましたが、やはり結果は同じで、ヒットしませんでした。別のパソコンでもやってみましたが、結果は同じでした。 整理しますと、 (preg_match("/japan's/i",$word,$match) ではヒットせず、よって コンマの前に\をつけて(preg_match("/japan\'s/i",$word,$match) としましたが、これもヒットしなかったということになります。 1) (')は正規表現の特殊文字でないはずですから、そのまま使えるはずだと思いましたが、なぜかこれが使えない。 2) しかも、その前にエスケープの \ をつけても、そのエスケープ が効かないのはなぜか。 追記: 最近分かったこと。 おもしろいことに、 'j すると、hitする。でも、j' とするとヒットしない。 ということは、コンマ自体には問題ないのだろうと推測しています。でも、文字の後にコンマがつくと、preg_matchにとって特別な意味を持つ文字列に変わるのではないか。

    • ベストアンサー
    • PHP
  • カンマ区切りの金額を検索するための、正規表現を教えてください

    PHP4を使っています。 表題のとおりなのですが、 カンマ区切りの金額を検索するための、正規表現を教えていただけないでしょうか? http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/regex-3-14.html を参考に、 $pattern = '^(0|([1-9][0-9]{0,2}(,[0-9]{3}){0,2}))$'; if (preg_match("/$pattern/", $oneline_buffer, $matches)){ としているのですが、 なぜかpreg_matchにひっかかりません。 (preg_match の直前の行を通っていることは、確認済みです) どなたか、お助け願えれば幸いです。

    • ベストアンサー
    • PHP
  • ワード差し込み印刷時の数字にカンマを入れたい

    ワードで差し込み印刷をする際、データはエクセルファイルで、エクセルファイルのなかでは数字の表示を桁区切りスタイルにしていますが、差込にすると普通に数字のになってしまいます。差込んでも桁区切りスタイルのままにさせることは出来ますでしょうか? 私がない知恵を絞って考えたのは、「元のエクセルファイルの数字を最初から文字列のカンマが入ったものにする」なのですが、文字列にするまではできても、その後カンマをいれる方法がわからないのです。 よい方法はあるのでしょうか??

  • 正規表現での改行数を求めるにあたって

    以下の文字列がフォームからPOSTされたとします。 ------------------- 1 2 3 4 5 ------------------- ポストされた文字列が$strに格納されているとして、 以下を実行しました。 ------------------- print preg_match_all("[\n\r]", $str, $dummy); print preg_match_all("[\r\n]", $str, $dummy); print preg_match_all("[\r]", $str, $dummy); print preg_match_all("[\n]", $str, $dummy); ------------------- 結果はこうなりました。 ------------------- 6 6 10 10 ------------------- どうやらマッチパターンが"[\n\r]"と"[\r\n]"の場合は空白行の数を、 "[\r]"と"[\n]"の場合は純粋に改行数を返しているようです。 どうしてこのような差が出るのでしょうか? 文字コードはEUC、改行コードはLFで統一していますが関係ありますか?

    • 締切済み
    • PHP
  • vba split関数 コンマ区切りの数字を表示 

    エクセルに不慣れなため教えていただけたら幸いです。 A列にコンマ区切りの数字があります。 列によってはコンマで区切られた数字が3つのものと4つのものが混在しています。 split関数でコンマ区切りの数字を分割してD~G列に表示したいと考えています。 3つのものだけだとvbaを作成できたのですが、4つ目があるときというプログラムが不明です。 現在作成済みのマクロは下記のとおりです。 Sub test() Dim SH As Worksheet Dim i As Long Set SH = Worksheets("sheet1") For i = 1 To 9 SH.Cells(i, 4).Value = Split(SH.Cells(i, 1).Value, ",")(0) SH.Cells(i, 5).Value = Split(SH.Cells(i, 1).Value, ",")(1) SH.Cells(i, 6).Value = Split(SH.Cells(i, 1).Value, ",")(2) Next i End Sub お手数ですがお分かりになられるかたがいらっしゃいましたら回答いただけたら助かりますのでよろしくお願いいたします。

  • vba split関数 コンマ区切り

    エクセル・vbaに不慣れなためわかりづらかったら申し訳ありません。 コンマ区切りの数字をsplit関数で分割して指定セルに表示したいと考えており、以前質問し回答をいただいた内容でやりたいことが出来るようになりました。 ただし、若干出力場所等の変更を行いたいのですが、変更することが出来ません。 以前はA~C列にあるものをE~H列・J~M列・O~R列に表示する。 その際、A~C列にあるコンマ区切りの数字は3つのものと4つのものがあります。画像の上段部分をご確認ください。 その際のマクロは下記のとおりです。 Sub Test() Dim i As Long, j As Long, k As Long Dim tmp As Variant For i = 1 To 3 For j = 3 To 11 tmp = Split(Cells(j, i).Value, ",") For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k) End If Next Next Next End Sub 変更したいのは、AC8~AE16にコンマ区切りの数字があります。 AC列にある数字はAI8~AL16にAD列にある数字はAS8~AV16に AE列にある数字はBC8~BF16に表示したいと考えています。 コンマ区切りの数字は3つのものと4つのものがあります。 (画像の下段部分をご確認ください。) 上記のマクロでは下記の部分を変更する必要なのかと考えていますが、変更方法がわかりません。 お分かりの方教えていただけたら幸いです。 どうぞよろしくお願いいたします。 For k = 0 To UBound(tmp) If k < 4 Then Cells(j, i).Offset(0, i * 4 + k).Value = tmp(k)

  • vba split関数 コンマ区切り

    エクセルに不慣れなため教えていただけたら幸いです。 A3~A11・B3~B11・C3~C11列にコンマ区切りの数字があります。 列によってはコンマで区切られた数字が3つのものと4つのものが混在しています。 split関数でコンマ区切りの数字を分割してE~H列・J~M列・O~R列に表示したいと考えています。 先ほど別の質問で下記のマクロを教えていただいたのですが、 その際は、A1~A9にあるものをD~G列に表示するというものでした。 よくよく考えると、A列のみではなく、B・C列と複数の列を コンマ区切りしたいと考えています。 このような場合は、どうしたらよいでしょうか。 vba不慣れなためわかりづらかったら申し訳ありません。 お分かりになられるかたがいらっしゃいましたら教えていただけますでしょうか。 よろしくお願いいたします。 Option Explicit ' Sub Macro1()   Dim Rout As Long   Dim Colu As Integer   Dim Expression As Variant '   For Rout = 1 To Cells(Rows.Count, "A").End(xlUp).Row     Expression = Cells(Rout, "A")     Expression = Split(Expression, ",") '     For Colu = 0 To UBound(Expression)       Cells(Rout, Colu + 4) = Expression(Colu)   Next Colu, Rout End Sub

  • カンマ区切りの数値文字列を数値に変換

    JSPで数値を入力して、データベースへ更新するプログラムを作成しています。 入力はカンマありでもなしでも通すようにしたいと思っています。 しかも、カンマの位置は特にチェックせずにしたいのです。 ちゃんとしたカンマ区切り数値なら、NumberFormatで数値変換できますよね? データベースの数値を表示する際にもカンマ区切り数値にしますので、1桁目を削除した場合には、カンマの位置が違ってきますよね。 そのためにカンマの位置は意識しないでいきたいのです。 StringTokenizer という便利なクラスがあったので使用してみたのですが、インスタンスを生成した後、トークン分をループで回して文字列を連結する必要がありますよね。 もっとスマートに一発で変換できないでしょうか? 「ある文字列からデリミタを省いた文字列を返すメソッド」みたいな。 よろしくお願いします。

  • promptでのカンマ区切りの数字の代入について。

    promptでのカンマ区切りの数字の代入について。 ひとつのpromptで4つの数字を取得したいです。 promptに1,2,3,4と入力されると、 A=1 B=2 C= 3 D=4 のように代入したいです。 C言語でこんなようなやり方があった気がしたのですが、JavaScriptでもできますか?? (promptを4回出せば良いのですが、最近のブラウザは2回目以降は表示しない設定にもできちゃうので、なるべくひとつでやりたいです。)