- - PR -
正規表現について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-05-08 21:34
正規表現で
1.文字列に"FLG0"が含まれている場合 2."NO***IP"の***の部分の数値を取得 3."IP***"の***の数値を取得 以上機能を追加したいのですが、2. 3.の実装方法が分かりません。 よければ対処法を教えていただけるとありがたいです。 ***** ***** ***** ***** ***** ***** ***** ちなみに以下の例では 取得したい値は aaa→150 130 bbb→50 0 です。 String aaa = "AAAFLG0BBBNO150IP130"; String bbb = "AAAFLG0BBBNO50IP0"; Pattern pattern = Pattern.compile(".*FLG0.*"); Matcher matcher = pattern.matcher(aaa); if(matcher.matches()){ System.out.println("HIT"); } ***** ***** ***** ***** ***** ***** ***** | ||||||||||||
|
投稿日時: 2005-05-08 22:16
こんな感じでどうですか? グループを使ってみました。 | ||||||||||||
|
投稿日時: 2005-05-09 10:26
やりたかったことはまさにこれです!!
かつのりさんに記述して頂いたソースを少し変更してみました。 変更点:NO*** IP***の部分は数値部しか取得しない *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** String[] args = new String[] { "AAAFLG0BBBNO150ddIP13022", "AAAFLG0BBBNO50ddIP0d", "AAAFLG0BBBNO50ddIP550d", "AAAFLG1BBBNO50dIP0d" }; Pattern p = Pattern.compile(".*FLG0.*NO(.[0-9]).*IP(.[0-9])"); for (int i = 0; i < args.length; i++) { Matcher m = p.matcher(args[i]); if (m.matches()) { System.out.println(m.group(1)); System.out.println(m.group(2)); } } *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** しかし実際変更してみると結果が表示されなくなってしまいました、、、。 どうも、IP(.[0-9])の部分がまずいみたいなのですが。。。 (この部分をIP(.*)に戻すと結果が表示される) またお助けいただけないでしょうか? | ||||||||||||
|
投稿日時: 2005-05-09 10:57
「(.[0-9])」とあるのがよくわからないのですが。 こんなのでどうでしょう。
こんな風にもかけます。
「\d」がなんたるかは、自分で調べてみてください。 あと老婆心でありますが、「.*」は多用しない方がいいと思います。 「.」は「\d」「\w」に、「*」も「+」に置き換えられるならそうした方がいいです。 2週間もたつと、自分でもメンテナンスできなくなっちゃいますよ。(- -; <追記> むむ。 本文中で「円マーク」を使用する方法はないものですかな。 <追記2> [0-9]を利用したものを追加。 最初も書いておくべきでしたね。 [ メッセージ編集済み 編集者: Edosson 編集日時 2005-05-09 11:16 ] | ||||||||||||
|
投稿日時: 2005-05-14 11:02
Edossonさんお礼が遅くなり大変申し訳ございませんでした。
Edossonさんの教えていただいた方法で思った通りのものを実装することができました。 正規表現、、、。なかなかおくが深いですが、使いこなせれば 大変大きな武器になることを知りました。 有難うございました!! | ||||||||||||
|
投稿日時: 2005-05-16 11:27
解決されているようですが、今回のような、固定フォーマットに対する
パースの課題なら、MessageFormatでもイケルと思いますよ。 C言語でいうところのscanf()標準関数に該当する処理をしてくれます。
| ||||||||||||
|
投稿日時: 2006-10-06 10:40
>正規表現で
>1.文字列に"FLG0"が含まれている場合 >2."NO***IP"の***の部分の数値を取得 >3."IP***"の***の数値を取得 > >以上機能を追加したいのですが、2. 3.の実装方法が分かりません。 ^(?=.*FLG0).*?NO([0-9]+)IP([0-9]+).*$ の一個目と二個目 [ メッセージ編集済み 編集者: ぷさいくろう 編集日時 2006-10-10 07:06 ] |
1