- - PR -
xmlデータベース tomcat
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-12-22 02:23
現在tomcatでxmlデータベースを使ったアプリケーションを作成しています。
そこでユーザー入力された文字(以下でstrdate)の曖昧検索をできるようにしたいのですが(equalsではなく数文字のパターンマッチングなど)、何か方法ありませんか。 ご教授願います。 objNod4=objNod3.getNodeValue(); if( objNod4.equals(strdate)){ //他のノードテキスト取得 私が考えたところでは以下のような感じになるのではないかと思いましたが エラーが出ました。 Pattern ptn=Pattern.compile("strdate*",Pattern.CASE_INSENSITIVE); Matcher mtch=ptn.matcher(objNod4); if(mtch.find()){ }else{ [ メッセージ編集済み 編集者: ベルトコンベア 編集日時 2006-12-22 22:58 ] | ||||
|
投稿日時: 2006-12-22 02:30
文字列中に特定のパターンが含まれているかどうかを検査する方法、に焦点を当てたいるのであれば "xmlデータベース tomcat"っていうタイトルはちょっとわかりにくいかもしれませんね。
それとも、xml データベースにパターンマッチングを行う機能があるのかどうかを尋ねたいのでしょうか? だとすればどのような製品を使っているか明記しないと助言のしようがありません。 単に特定の文字列が含まれているかどうかであれば indexOf() で -1 以外が帰ってくることを確認するのがシンプルです。詳しくは String クラスの API を見てください。 より複雑な条件でひっかけたいというのであれば正規表現を使うのは良いアイディアだと思います。 正規表現API の使い方がわからないということでしょうか? コンパイルエラーが発生しているのでしょうか? それとも例外が発生していますか? その例外やエラーをキーワードに検索してみてはいかがでしょう。 [ メッセージ編集済み 編集者: インギ 編集日時 2006-12-22 02:34 ] | ||||
|
投稿日時: 2006-12-22 22:57
インギさん、お返事ありがとうございます。
indexofについて調べてみます。 現在の状況ですが、コンパイルエラーは返されずに、strdate*のデータが取得されずに、else以下の処理がされてしまう感じです。 [ メッセージ編集済み 編集者: ベルトコンベア 編集日時 2006-12-22 23:00 ] | ||||
|
投稿日時: 2006-12-22 23:39
>現在の状況ですが、コンパイルエラーは返されずに、strdate*のデータが取得されずに、else以下の処理がされて
>しまう感じです。 すると正規表現API の使い方の問題ではなく、if 文の条件式の書き方がよくわからないということでしょうか??? もう少し何がわからないのかに焦点を当てて質問、コーディングすると良いと思います。 xmlデータベースが、tomcatが、といった要素は排除して、 main メソッドだけで今自分が難しいと感じていることを実現してみましょう。 | ||||
|
投稿日時: 2006-12-22 23:49
はじめまして。
この正規表現では、大文字と小文字を区別せず "strdat" という文字列の後に 'e' が0回以上連続する文字列とマッチしますが これは意図した動作でしょうか? (具体例で言えば "strdat", "strdate", "strdateeeeeee" にマッチします) java.util.regex.Pattern の API を確認することをお奨めいたします。 特定の文字列が含まれているかどうかを知りたいのであればインギさんの おっしゃるように String#indexOf() が手っ取り早いですが、 正規表現でマッチングを行うとなると(多分)String 変数である strdate 中に 含まれる正規表現のメタ文字なども考慮する必要がでてきます。 ユーザ入力された文字をそのまま使用して正規表現マッチングを行えば、 正規表現を知っているユーザには非常に柔軟性が高いですが少し怖い感じもしますね。 strdate*のデータが取得されない、ということなので もしかして私の問題点の認識が間違ってますかね? [ メッセージ編集済み 編集者: Jaune 編集日時 2006-12-23 00:12 ] | ||||
|
投稿日時: 2006-12-23 23:00
インギさん,jauneさんお返事ありがとうございます。
私のつたない文章に的確な返事を下さって、感謝しております。 もうご存知かと思いますが、特定の文字列にマッチしたときのみ、if文の中の処理を実行したいが、マッチせずにelseの処理結果がいつも返ってくる。そのパターンの書き方で困っています。(strdate*が例えばstrdate.javaとマッチしない) java.util.regex.Pattern の API、indexofについてもう一度調べなおしてみます。APIを読んでから、strdate*はstrdate.javaとマッチするはずと判断したので、お恥ずかしい限りです。 [ メッセージ編集済み 編集者: ベルトコンベア 編集日時 2006-12-23 23:04 ] [ メッセージ編集済み 編集者: ベルトコンベア 編集日時 2006-12-23 23:33 ] | ||||
|
投稿日時: 2006-12-24 13:24
"strdate.java" にマッチさせたいのであれば、正規表現としては、例えば "strdate.*" のようになりますね。 | ||||
|
投稿日時: 2006-12-24 18:08
正規表現については各種言語にありますが、
基本がわかれば大体対応できますので、 一通りJavaに限定しないで勉強されることをお勧めします。 オライリーあたりで正規表現の本が出ていますが、結構勉強になると思います。 ちなみに私は、初心者の頃は秀丸の正規表現検索で勉強しました。 いろいろな結果をテキストに書いて、検索ボックスに正規表現を入れるだけですから、 試行錯誤を繰り返すのが非常に簡単です。 ちなみに、きよのさんが仰るのを補足すると、 「*」は前の文字に対して繰り返し回数を指定するものです。 「strdate*」だと、「strdatの後にeが0回以上」を意味します。 そして、「.」は「何か1文字」を意味します。 つまり、「strdate.*」は「strdateの後に何か0文字以上」を意味します。 SQLで言えば「xxx like 'strdate%'」です。 |