人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

正規表現で質問です。
ver1.1やver1.1aなどver1.1xが混在するテキストからver1.1のみマッチさせるには
どうすればいいでしょうか。vbのregexだと最小マッチに対応していないと聞いたため、
BASP21というコンポーネントを使用しています。下記のソースだとver1.1aもver1.1bも
マッチしてしまいます。

sw = "ver1.1 ver1.1a ver1.1b"

Matches = MatchEx("/ver1.1+?/", sw, 1)
If IsArray(Matches) Then ' 配列のとき、マッチ
Dim v As Variant
For Each v In Matches
Debug.Print v
Next
End If

●質問者: kuruma_neko
●カテゴリ:コンピュータ
✍キーワード:1B AS NeXT print regex
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ココサブ
●60ポイント

MatchEx("/ver1.1+?/", sw, 1)

MatchEx("/?bver1?.1?b/", sw, 1)


にしたら動くと思います。

?bがワードごとの境界を表していて、ver1.1という単語のみとマッチするはずです。

. を ?. としたのは . だけではあらゆる文字とマッチしてしまうためです。


Perlの方で適当に確認したので動かなかったらすいません。

◎質問者からの返答

無事にver1.1のみにマッチしてくれました。ありがとうございました。


2 ● arcana
●10ポイント

http://www.hi-ho.ne.jp/babaq/faq.html

BASP21.DLL のMatchExメソッド、BREGEXP.DLL のMatchEx 関数で簡単に使えます。

C++ では、BMatch 関数で BREGEXP構造体を次のように使います。

この為、正規表現の [$](ドルマーク) が利用できると思います。

MatchEx("/ver1.1$/", sw, 1)

この様に変更して「最後が […ver.1.1] で終わる」という指定にしてはどうでしょうか?

もしくは文中での表示である場合、

MatchEx("/ver1.1 /", sw, 1)

後続文字が無い(=半角スペース)という判断でいけるかと思います。

◎質問者からの返答

$ですと行末マッチなので、今回のケースには使えません。また、かならず半角スペースがくるとも

限らないので、悩んでました。そこで最小マッチとして?を使ったのですが、使い方が悪いのか、

ver1.1のみにマッチしてくれませんでした。ともあれ、無事に解決できましたので、回答ありがとう

ございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ