アレルギー対策、自宅でできる効果的な方法とは?

すいません。
教えて下さい。

1024~65535までの数字範囲を正規表現でヒットさせたいです。
得に言語は問いませんが、私はVBSで実装しようとしています。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

この質問は、質問者さんがフィードバックするわけでもないし、回答側がいろんな想像をしながら、回答しているわけで、これも、その一つなんでしょうけれどもね。



でも、#3でもかきましたが、Perl を使えとまでは言いませんが、テキストファイルなら、grep で十分なのですね。windows用のgrep というのもあります。しかし、kwic(key word in context)のコンコーダンスを作る目的なら、話は違ってきます。

'//Wscript で、argumentは、ドラッグして入れてください。
'//
Dim Matches
Dim Match
Dim objFso
Dim objTxIn
Dim TxIn
Dim Tx
Dim fname
Dim buf

Set objFso = CreateObject("Scripting.FileSystemObject")
If WScript.Arguments.length =0 Then
WScript.Echo "ファイルをドラッグして、このファイル名にDropしてください。"
WScript.Quit
End If
fname =WScript.Arguments.Item(0)
If objFso.GetExtensionName(fname) = "txt" Then
Set objTxIn = objFso.OpenTextFile(fname)
Tx = objTxIn.ReadAll()
Else
WScript.Echo "拡張子がtxtではありません。"
WScript.Quit
End If
With CreateObject("VBScript.RegExp")
.Pattern = "\b([\d,]{4,6})\b"
.Global = True
Set Matches = .Execute(Tx)
For Each Match In Matches
buf = buf & " " & CheckFigures(Match.Value)
Next
End With
If Trim(buf) <> "" Then
WScript.Echo buf
End If

Function CheckFigures(byval num)
Dim num2
If IsNumeric(num) Then
num2 = CLng(num)
If num2 >=1024 And num2 <=65535 Then
CheckFigures =num
Else
CheckFigures =""
End If
End If
End Function
'///
    • good
    • 0

#4に訂正です。



パターンの前後2か所、
\D
ですが、
\D?
または
\D*
でした。
うっかり忘れていました。

失礼しました。
    • good
    • 0

こんにちは。

お邪魔します。

VBSですが、ベタに書いてみました。
もっとも、"1024"-"65535"の数字だけを抜き出す方法、ということですが。

' 数値 →       60000-64999|65 000-499 |655 00-99|6553 0-5 |10000-59999|2000-9999|11 00-99  |10 30-99 |102 4-9
' 桁 →       ⑤ ④  3-1 |④ ③ 2-1 |③ ② ① |②①   | ⑤  4-1 |④  3-1 |④ ③ 2-1 |43 ② 1 |4-2 ①

regexp.Pattern = "\D0*(6([0-4]\d{3}|5([0-4]\d{2}|5([0-2]\d|3[0-5])))|[1-5]\d{4}|[2-9]\d{3}|1[1-9]\d{2}|10[3-9]\d|102[4-9])\D"

このパターンで、
hoge = matchcollection(i).SubMatches(0)
みたいな感じです。

コメントは等倍フォントで見ると、各桁の表現を示唆しています。

パターン冒頭の0*は、"01024"-"09999"等にもマッチさせたい場合のものです。
本当は、4桁数値文字列の場合だけ

前後の\Dは外せないので、用途によっては使い物にならないかも知れませんけれど、、、。
    • good
    • 0

#2の回答者です。



今、ふと気になったことですが、もしかしたら、文章とかの中から、数字を探しだして、それが、範囲内にあるとかでは?そういう場合は、正規表現以外には無理かもしれませんね。他では効率が悪すぎます。こうした質問というものは、えてして、いろんな条件や背景があるものですから、もしそうなら、コードが違ってきます。そういう場合、ANSIでしたら、grep の方が便利かもしれません。Unicodeですと、かなり選択肢が減ります。
    • good
    • 0

こんにちは。



1024-65535という数値を正規表現でヒットできるかなんて、一般的には考えられません。
正規表現は、文字列に対するもので、文字コードを扱うというなら意味は分かりますが、
数値の範囲でマッチさせるには、一旦、Chrで、ダミーの文字を作って、そこで判定させる方法しかないはずです。

a = Chr(1024)
b = Chr(65535)
Re.Pattern = "[" & a & "-" & b & "]"

とぐらいしか思いつきません。

基本的に数値は、数値で扱うしかないと思います。
MsgBox CBool(num >=1024 and num <=65535)
    • good
    • 0

純粋な正規表現では大変面倒くさいので、以下をオススメします



正規表現 \b\d+\b でマッチした文字列を数値に変換して、
その数値が範囲内である場合だけ、マッチした文字列をヒットとして扱う

もし正規表現だけで実現させたいなにか特別な理由があるならば
\b(102[4-9]|10[3-9]\d|1[1-9]\d\d|【中略】|6553[0-5])\b
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q正規表現または構文で数値の範囲の指定

if($a =~「1~20」までの数字又は「1_1~1_20」~「20_1~20_20」までの数字){
OK;
}else{
NO;
}

を正規表現や条件分岐を使って範囲指定したいのです。

[1-9]
ですと111等も対象になりますし、{n,}とした場合でも数値の1~20までとは出来ないようで・・・。
また正規表現では_の扱いが今一わからない状況で
更に()と?を使って思考錯誤を繰り返しているうちに
[]//の用途がだんだんと分からなくなってしまいました。

各用途については調べ整理しているつもりなのですが
今回のようなケースに関して参考になる例を見つけられず質問させて頂きました。

ご掲示頂けませんでしょうか。宜しくお願いします。

Aベストアンサー

#3>各細部についての意味
/^(?:[1-9]|1\d|20)(?:_(?:[1-9]|1\d|20))?$/
/^~$/
^:先頭から
$:最後尾までの間
にある、つまり、今回の対象文字列だけが入っている。(他の文字列に埋もれているのを対象としているのではない)
(?:~):グループ化する、()と違うのは$1などに値を設定しないこと、単にグループ化する時に使う。
[1-9]:1から9までの一文字を表す
\d:[0-9]の意味
[1-9]|1\d|20:|は、orの意味、1~9であるか10~19(1で始まる0~9)であるか20であるの意味
(~)?:~が0回または1回ある

Q正規表現でAND検索はできるのでしょうか

正規表現でAND検索はできるのでしょうか?

現在ASPでデータベースのデータを検索しようとしているのですが,検索エンジンみたいに複数の語をスペースで区切って入力して,データを絞り込んで表示したいのです。

OR検索みたいにそれぞれの語を"|"でつなぐというようなやり方があるのでしょうか?
それとも一つ一つの語で検索を繰り返すという方法しかないのでしょうか?

ご存知の方,ご教授ください。

Aベストアンサー

&&でつながれたらいかがですか?

(?=.*stat)(?=.*ate)はAND検索という意味ではありません。
statedのようにstatとateを重複して含む単語にマッチするという意味です。

普通はこんな回りくどいことはせず、
/stat/ && /ate/
で済ませると思います。
(もしくは単純にループでまわしていくとか)


foo.*bar|bar.*foo
も、2語程度までが限界ですよね。
10語分繋げることを考えると気が遠くなります。
(記述も処理時間も)

言語によってはさらに処理を短縮できるような
特有な構文がありますから、調べてみればよろしいかと思います。

Qsedの置換文字に変数を使用したいのですが・・・

あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。

例:
X="a"
Y="b"
echo test.txt | sed 's/${X}/${Y/g}' >test.txt

sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

Aベストアンサー

' ・・・' で囲まれた中の$はそのままドルマークです。変数展開をするなら、'・・・'で囲んではいけません。

何も囲まないか、"・・・"で囲むかです。

Qテーブルからのselectにおいてデータの有無により結果をわけたい

id | point
----+-------
1 | 10
2 | 9
3 | 5
....
というテーブルがあるとします.
idを指定してpointを得たいのですが、そのidがこのテーブルに存在しない場合は空の結果ではなく0を返したいのです.
plpgsqlなどを使いif文で場合分けすればできることはわかっているのですがSQL文だけで(それもできれば1文で)これを実現する方法はあるでしょうか?
よろしくお願い致します。

Aベストアンサー

変則的ですが、これでよければidがユニークでなくても大丈夫ですし、集合関数を使わなくてもOKです。

select dm.id,case when ex1.point is null then 0 else ex1.point end from
(select ? as id) as dm left join ex1 on dm.id = ex1.id;

?を適当に変えてください。
chukenkenkouさんの発想はこれですよね。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Qbashなどのシェル変数の値に改行を含める事は可能でしょうか?

タイトルの通りですが、通常のシェル変数の値として

 [prompt]$ aaa="bbb<改行>ccc"

のようなセットを行い、

 [prompt]$ echo $aaa
 bbb
 ccc
 [prompt]$

のような結果を得たいのですが、可能でしょうか。

Aベストアンサー

可能です.
というか,やってみたら出来ることがわかると思います.こんなところで聞くより早い.
なお,sh/bash系では改行文字は特にエスケープせずそのまま入れられます.

aaa='bbb
ccc'

Q別のDBからテーブルをコピーする方法

SQL Server2005 Express Edition を使っています。
異なるDB間(同じコンピュータ内)で、テーブルをコピーしたいの
ですが・・・
コピー元DB名:DB_A
コピー元テーブル名:dbo.顧客
コピー先DB名:DB_B

テーブルのコピーは select * into ・・・ from ・・・ を使えばできそうですが、別DBの場合の方法がわかりません。
お教えいただければ幸いです。
よろしくお願いいたします。

Aベストアンサー

別のDBでも同じインスタンス内ならば同じです。

SELECT * INTO DB_B.dbo.顧客 FROM DB_A.dbo.顧客

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報