プロが教えるわが家の防犯対策術!

部分一致検索のシステムを作ろうと考えているのですが、途中が任意のものを含む部分一致検索が実装できないので、助言をお借りしたいです。

例えばこんなのです↓

本文(Sentence)
The apple which he points is red.
フレーズ(pattern)
The apple ~ is red

この場合The apple ~ is red という流れのフレーズが本文に含まれているので、変数Sentenceに変数patternが含まれると判定し、true結果を示したいです。


result = "aBBBa" Like "a*a"のようにlike文が有用かなとも思ったのですが、文字列を直接入れるような形でないとできないようなので、これでは実用性に欠けてしまいます(複数のフレーズの判定ができないので)
変数に対応した形で実装したいです。

よろしくお願いします。

A 回答 (4件)

VBのどのバージョンか不明ですが、


正規表現のpatternを利用して
マッチするか否かで判断してみるとか?
    • good
    • 0

>result = "aBBBa" Like "a*a"のようにlike文が有用かなとも思ったのですが、


>文字列を直接入れるような形でないとできないようなので、これでは実用性に欠けてしまいます
というのは、以下のようなことができないといっています?
(イミディエイトで試してますが、できますけど。)

(1)変数が使えないといっている?
testdata = "This is a pen"
check_left = "This "
check_right = "pen"
?testdata like check_left & "*" & check_right
True
testdata2 = "That's a pen"
?testdata2 like check_left & "*" & check_right
False

(2)複数の条件がチェックできないといっている?
check1_left = "This "
check1_right = "pen"
check2_left = "That's "
check2_right = "pen"
testdata = "This is a pen"
?(testdata like check1_left & "*" & check1_right) or (testdata like check2_left & "*" & check2_right)
True
testdata2 = "That's a pen"
?(testdata2 like check1_left & "*" & check1_right) or (testdata2 like check2_left & "*" & check2_right)
True
testdata3 = "That is a pen"
?(testdata3 like check1_left & "*" & check1_right) or (testdata3 like check2_left & "*" & check2_right)
False
条件の数が多いなら、
左側(check_left)と右側(check_right)の文字列を配列に入れて、for ~ nextでif文つけて、
1個ずつチェックする処理にすればいいですが。

上記ではないとしたら、もう少し具体的にお願いできますか。

★ところで、この検索は気をつけないと
The apple ~ is red を求めようとして、
The appleton is redrawed on this map.
(こんな英語あるのかな)
とかがでてくることがありえますのでご注意を。
appleの直後に空白を入れるのはいいとして、redの後ろに空白入れると
The apple made in Japan is red.
が対象にならないとか。
.や,は別扱いにするとか考慮する必要あるかもしれませんよ。
また、大文字、小文字の問題で、
Today,the apple is Red yet.
が見つからないとかもおきます。
## と、似たような検索機能を作ったことある人からの余談でした。。。
    • good
    • 0

InStrを使って出来ます。


「The apple ~ is red」を例に取れば、まず、「The apple」が本文で最初に存在する位置を求めます。あれば、次に「is red」について本文の先ほどの位置プラス「The apple」の文字数分以降に存在するかを求めます。存在すれば「The apple ~ is red」としてTrueになります。第一引数を本文、第二第三引数をフレーズ1,2とでもしてTrue/Falseを返すようにすればいいでしょう。
    • good
    • 0

>result = "aBBBa" Like "a*aのような、プログラム・コードを入れた書き方でなく


文章で、TRUEを返したい例文を5個程度挙げてみたらどう。
自分で分析した事項の文章表現も出来るなら書いてみるとか。
質問では、コードは回答者に任せ、したいことを文章表現する、に徹せよ。
aBBBaは何を言いたいのかよくわからない。
ーー
例の
>本文(Sentence)
The apple which he points is red.
フレーズ(pattern)
The apple ~ is red
も文法的に言えば、S+V+Cの文型というよなことまで踏み込むのか?
    • good
    • 0

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