正義表現検索について

解決


Kome  2003-03-26 03:45:31  No: 106427

VB6.0で正規表現(RegExp)を使用し、以下のようなことをしたいのですがやり方がわかりません。
他の方法ではなく正規表現で行いたいのです。
桁数4桁と設定されているが4桁未満でも構わないです。[0-9A-Z]
5桁以上入ることありません
正しく0-9,A-Zであり桁数が減るの問題なのですが、記号が入ると正常で通ってしまいます。

0A1B→OK
0A1 →OK
0A  →OK
0   →OK
0A1@→NG
0A* →NG
0   →NG
+A1B→NG
  ・
  ・
  ・


Loreley  2003-03-26 07:04:16  No: 106428

つまり36進数みたいなことをやりたいということなのでしょうか。
まずは自分のコードを書いてもらわないと、
どこが間違っているのか答えようがありません・・・。


Kome  2003-03-26 18:48:16  No: 106429

今の状態は、

objReg.Pattern = "[0-9A-Z]{1,4}"

If objReg.Test(strCheck) = False Then

で行っていますが、0-9,A-Zの範囲で4桁未満は正常に通るのですが、
途中に記号が入っても正常で通ってしまいます。

タイトルに誤り
誤:正義表現  正:正規表現


Y2  2003-03-27 08:38:08  No: 106430

回答では無いので申し訳ないのですが、VB6.0に正規表現によるパターンマッチは今まで無かったと思っていたのですけど、やっぱりあるのでしょうか?
MSDNで”RegExp”などを検索しても見当たらないのですがRegExpの使い方を教えてもらえませんでしょうか?
(JavaScriptとPerlの正規表現の使い方は知っているのですけど)


たかみちえ  URL  2003-03-27 09:18:28  No: 106431

>Y2さん
  そういうDLLがあるので、それを使えばどんな言語でも使えますよ。
  クラスとしても作れなくはなさそうですけど、それは使い物になるかどうかは別です^^;

  "BRegExp"と入れて(他には何も入れないで)検索してみてください。
きっとDLLのページが先頭に出てくるでしょう。

  ちなみにVBでは、ワイルドカード比較なので、上よりちょっと低機能ですけど、
Like演算子をうまく使えば、結構正規表現っぽいことができます。
今日 Like *日 = True 見たいな感じに使うものだったはず。


Kome  2003-03-27 09:55:21  No: 106432

>Y2さん
VB6.0でも正規表現は使用できます。
参照設定でMicrosoft VBScript Regular Expressions 5.5を選びます。
IE5.5以上でなければいけません5.0でもいいようなことがどかのHPにあった気がしますが、5.5以上がよいと思われます。

質問の件
objReg.Pattern = "[0-9A-Z]{1,4}"
だと1回以上4回以内マッチ(?)になるみたいですね。
桁数4桁以内でのチェックが出来ません。

5桁以上:エラー
0-9A-Zの範囲で4桁以内:正常
4桁以内で途中に記号:エラー
正規表現でやるのは無理なのでしょうか・・・。


Loreley  2003-03-27 11:26:17  No: 106433

それであってると思いますよ。
記号があってはいけないという指定もないわけですし、
途中に0-9かA-Zが一文字でもあれば、
[0-9A-Z]{1,4} //(0-9とA-Zの1文字以上)
という条件には一致します。
"A*"としても最初の"A"だけで一致するので、
Trueになります。

なので、この場合は
[^0-9A-Z]を使って
指定文字以外が検出されればエラーということもしないといけないと思います

objReg.Pattern = "[0-9A-Z]{1,4}"
If objReg.Test(strCheck) = True Then
objReg.Pattern = "[^0-9A-Z]"
If objReg.Test(strCheck) = True Then
'エラー

といった感じになるんですかね。
小文字はどうするかも必要ですけど。

いきなり"(.*[^0-9A-Z].*)"で検索して、
記号や小文字があり次第、即エラーのほうがいいのかな。

これでどうでしょう?


Kome  2003-03-27 18:49:54  No: 106434

Loreleyさんありがとうございます。
解決できました。


Y2  2003-03-27 18:53:48  No: 106435

なるほどー、外部のライブラリを使うわけですね。
参考になります。(^Д^)/
MSDNでの独学が多いので、ここの掲示板の情報は結構価値が高いです。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加