• 締切済み

javaにおける正規表現

javaの正規表現で文字と文字の間の文字を抽出という処理をおこないたいのですが、うまくできません。 抽出したいないようは、 「今日の最低気温-1℃です」の[-1]です。 様々な文献をしらべましたが、自分なりの答えを導くことができませんでした。 よろしくおねがいします。

  • Java
  • 回答数4
  • ありがとう数4

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

自分の手元で動作するのを確認してからソースをそのままコピー&ペーストしてますので、 そちらで動かないといわれてもどうしようもありません。 まして動かない原因を探る手がかりもありませんから。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

こんなかんじでいいですか? import java.util.regex.*; public class OKWave{ public static void main(String[] args){ String pat = "-?\\d+(?=℃)"; String[] samples = { "今日は最高気温11℃、最低気温-1℃です", "最低気温-15℃でした。" }; Pattern p = Pattern.compile(pat); for (int i = 0; i < samples.length; i++){ Matcher m = p.matcher(samples[i]); if (m.find()) { System.out.println("取り出した気温は" + m.group() + "でした"); } } } } 実行結果: 取り出した気温は11でした 取り出した気温は-15でした

hamadamaro
質問者

お礼

丁寧な回答ありがとうございます。 まさしくもとめていた答えです。 さきほどIDEにて走らせてみました。 IDEでOKWavaクラスのプログラムが、System.out.printlnされませんでした 汗; プログラムの構築はきちんとされるみたいなのですが、 なんどもすみません。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> 最初に現れる「℃」の前の数字のみ抽出したいです。 なら、 -?\d+(?=℃) でやれば、温度の数字(符号含む)だけを取り出せますよ。 あ、気温が 15.8℃みたいに小数点つきになったりします?

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

もうちょっと条件を明確にしてください。 たとえば文字列には数字は一カ所しか現れないとか、 前後にこの文字が必ず現れる。とか。 ℃が続く数字ということなら -?\d+℃ あたりを起点に適当に調整するとかですが。

hamadamaro
質問者

お礼

回答ありがとうございます。 文字列には「-」の文字が数か所現れますし、数字も数か所、「℃」という文字は2箇所あらわれます。 最初に現れる「℃」の前の数字のみ抽出したいです。 前後に温と℃は必ず現れます。 抽出したい部分が「温」と「℃」の間の数字のみ抽出したいです。 条件が曖昧でもうしわけございません。

関連するQ&A

  • javaでの正規表現

    はじめまして。http://okwave.jp/qa4464441.htmlにて良回答を拝見し、相談したくメッセージをおくりました。 正規表現にて「今日の気温-3℃です。明日の気温-4℃です。」の文字列を、「温」と「℃」の間の数字の部分を抽出したいです。文字列は決まって温と℃の間にあります。できれば前質問と同じくコードで説明してくださるとありがたいです。 大変困っております。どうかご教授下さい。宜しくお願いします。

  • MySQLにおける正規表現

    はじめて投稿させていただきます。 質問なのですが、 mysqlの正規表現において、文字と文字の間の文字の抽出はできますでしょうか?様々なwebサイトを参考にして挑戦しましたが、うまくいきません。よろしくお願いします。 tableはweatherテーブルとし、 id:int content:char 正規表現抽出内容[曇時々雪 - 最高気温-2℃ (木)] の文字列のうち[-2]を抽出 試してみたselect文 select content from weather content regexp "['温'-'℃']"; です。 他にもいくつか検証しましたが、答えを導くことができませんでした(*_*;よろしくおねがいします。 ちなみに、登録者のuserテーブルに格納されているカラム(利用者設定温度)と比較し、設定温度>正規表現結果のuser情報だけを表示したいのですが、できますでしょうか?(正規表現と関数計算の応用?) userテーブルは id:int temperature(設定温度):int よろしくおねがいします。

  • javaの正規表現について質問です。

    javaの正規表現matchesに関して質問です。 正規表現を用いて文字列が半角数字のみで出来ているかどうかを判定したいと思っています。 調べたとろこ下記の正規表現で判定できそうなのですが、 正規表現のルールが理解できず困っています。 ------------------------------------------- String aaa = "0123456789"; //パターン1 aaa.matches("^[0-9]{10,11}$"); //パターン2 aaa.matches("^[0-9]+$") ------------------------------------------- パターン1 ^[0-9]   →  文字列の先頭が0~9か判定 {10,11}   →  10~11回繰り返す(繰り返すというのは[0-9]かどうかということでしょうか?)           12文字目に文字を入れた下記文字列でもfalseが返ってきました。           解釈が間違えている?           String aaa = "0123456789a"; $      →  文字列の最後が[0-9]を10~11回繰り返しているかどうか? パターン2 ^[0-9]   →  文字列の先頭が0~9か判定 +$ →  文字列の最後が???? すいません自分で書いてて混乱してきました。 どなたかアドバイス下さい。

    • ベストアンサー
    • Java
  • Javaの正規表現

    Javaのプログラムで文字列に含まれるスラッシュを 全てバックシュラッシュに置換したくてreplaceAllを使用しています。 しかし、正規表現がよく分からず、エラーとなります。 どう記述すれば良いでしょうか? string.replaceAll("\\/", "\\"); ではエラーとなり、第二引数を\や\\\としてもダメでした。

    • ベストアンサー
    • Java
  • Javaプログラム内の正規表現

    スパイダーツールという技術(?)をつかって、 (あらかじめプログラミング言語で、使用者の必要な情報のみを検索し、出力してくれるというもの。言語はJavaでできています。) ヤフーファイナンスの値上がり/値下がり率ランキングを自分仕様にして利用しようと考えています。 その場合、Javaプログラム内に正規表現で書かれている部分があって、そこも書き換えが必要のようなんです。 しかし正規表現となると、不得意なJavaよりももっと理解不能! …そこで質問です。 日本語→英文 英文→日本語 と直せる翻訳サイトのように、正規表現も翻訳できるサイトありませんか!? もしくは正規表現について、分かりやすいサイトをご存知の方はご一報をどうぞ宜しくお願い致します。

    • ベストアンサー
    • Java
  • javaの正規表現について

    入力さた文字列を正規表現を使用して内容を確認したいんですが、条件はa~z 0~9 特殊文字?+%&#などを組み合わせた8文字以内。 [0-9a-z] 特殊文字と文字数の制限方法がわからないので、アドバイスお願いします。

  • |。ってなんですか? 正規表現

    正規表現の学習中です。読んでいる本の中に次の式がありました。  (?<=^|。)[^。]+。 日本語の文章の中から一文を抽出するための正規表現です。  。以外の文字がダーッと連なった後に。が来る文字列 とのことです。  [^。]は。以外の文字  +はそれが1個以上ある ですから  [^。]+ は  。以外の文字が1個以上ある という意味です。 その後に。が付きますから、  [^。]+。 だけで  。以外の文字がダーッと連なった後に。が来る文字列 ということになります。 では  (?<=^|。) の意味は何でしょう。  (?<=なんたら) は後方参照を意味しますから、 ^|。 のすぐ後に [^。]+ が続くと言いたいのでしょうか。 だとすると  ^|。 が問題です。  ^もしくは。 という意味なら、^は正規表現で記号として使われている文字ですから、  \^|。 と表現されそうなものです。 それに、。は文末でしか利用されない文字ですから、これに注目して検索を行うというのは理解できますが、^は日本語でなんら特徴を持つ文字ではありません。  ^もしくは。 という理解は間違いでしょう。 それでは^を記号として考えるとして、その前後を[]で囲んでいないから、この^は文字列の先頭を表すのでしょうか。そうすると件の正規表現は  先頭の|。のすぐ後から。以外の文字が連なった後に。が来る文字列 という意味になります。日本語の一文を抽出する正規表現という解説にかなり近づいてはいます。 しかし  |。 とは一体何? |はorを意味する記号ですが、  何とか or 。 という意味でしょうか。 でも「何とか」は「何とか」なりに何か文字表現がなされていても良さそうですし、それに  先頭の「何とか」または。のすぐ後から・・・ という解釈は意味不明。  |。 はどのように解釈すべきなのでしょうか。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • 正規表現の置換について質問です。

    javaで入力された文字の中に半角記号が含まれていた場合、文字内に存在する記号を正規表現で文字列として扱いた際に、エスケープで置換するような処理を正規表現で作成したいのですが、どのように作成すればよいでしょうか? 例:aa_bb*cc dd! よろしくお願いします。

  • 正規表現

    Java 5.1 java.util.regex.Pattern java.util.regex.Matcher を用いてHTMLのTABLEを抽出したいのですが、ヒットしません。正規表現のパターンはどうしたらいいのでしょう? パターン: < *table.*?>[\s.]*?< */table *?> 検索対象: … <table border=1 width=200> <tr><th>AA</th><th>BB</th></tr> <tr><td>CC</td><td>DD</td></tr> <tr><td>EE</td><td>FF</td></tr> </table> … で、TABLEタグを含むTABLE全体を期待したのですが全くヒットしませんでした。 ちなみに * <table …>と</table>単体ではヒットします。 * ソースから改行文字を取り除いて一行テキストとした場合にはヒットします。 これらのことから、改行文字がマッチしていないことが原因かと思うのですが、パターンの正規表現についてご教授願います。

    • ベストアンサー
    • Java
  • 正規表現による抽出について質問です。

    正規表現による抽出について質問です。 お世話になります。 掲題の件なのですが、 文字列 ”1,2,3,4,10,12,13,17,” があったとします。 この文字列から数字のみを取得し配列として 値を持ちたい場合、どのように処理すれば良いのでしょうか?? お忙しいところ恐縮ですが、ご回答いただけましたら幸いです。

    • ベストアンサー
    • PHP

専門家に質問してみよう