こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

.NET正規表現で(?=...)を使えない?

お世話になります。
以下のページ(.NET Framework 開発者ガイド>グループ化構成体)
http://msdn.microsoft.com/ja-jp/library/bs2twtah(VS.80).aspx
に、.NET正規表現について以下のようなパターンがあります。
 (?= subexpression) ゼロ幅の正の先読みアサーションです。(略)
 (?! subexpression) ゼロ幅の負の先読みアサーションです。(略)
 (?<= subexpression) ゼロ幅の正の後読みアサーションです。(略)
 (?<! subexpression) ゼロ幅の負の後読みアサーションです。(略)
これらは、あるパターンが注目している前/後に現れる/現れないかどうかをチェックするけど、それらをキャプチャーしないというものです。

これを使いたいのですが、使えません。以下はVBScriptのプログラムで、WSCript 5.6および5.7で動作させました。(インデントを表現するために全角空白を使っています。実際に動かしてくださる方はタブ文字かなにかに変換願います)

Option Explicit
Dim objRegExp ' 正規表現オブジェクト
Dim objMatches ' 検索結果
Dim objMatch ' 検索結果
Dim strMessage ' 表示メッセージ

Set objRegExp = New RegExp
objRegExp.Pattern = "(?<=「)[^」]+(?=」)"
objRegExp.IgnoreCase = True
objRegExp.Global = True
Set objMatches = objRegExp.Execute("カッコ前「カッコ中」カッコ後")

WScript.Echo objRegExp.Pattern & " は"
For Each objMatch In objMatches
 strMessage = " " & objMatch.FirstIndex + 1 & _
  " 文字目に見つかりました。" & _
  "一致した文字列は " & objMatch.Value & " です。"
  WScript.Echo strMessage
Next

Set objMatches = Nothing
Set objRegExp = Nothing

ところが、
 objRegExp.Pattern = "(?<=「)[^」]+(?=」)"
のところで「正規表現で構文エラーになりました」となります。
これを、もっと簡単なパターン、
 objRegExp.Pattern = "(?:「)[^」]+(?:」)"
とすれば動くことは分かっているんですが、今の私の主眼としては「(?<=...)」および「(?=...)」を使いたいんです。

他に、Word 2007 の VBA を試しましたがダメでした。

正規表現自体は合っているようです。
というのは、以下のテストツールで動作できたからです。
http://www.ultrapico.com/Expresso.htm

ということで、これらの新しい .NET 正規表現を VBScript や VBA で動かす方法はあるでしょうか。
よろしくお願いいたします。

投稿日時 - 2009-08-10 18:13:52

QNo.5196805

すぐに回答ほしいです

質問者が選んだベストアンサー

VBScript やVBAの正規表現と.NETの正規表現とは別物です。
.NETのもので使えるものがVBScriptでも使えるとは限りません。

Clinick's Clinic on Scripting: 正規表現による Visual Basic Scripting Edition (VBScript) の機能強化
http://msdn.microsoft.com/ja-jp/library/ms974570.aspx

>正規表現自体は合っているようです。
「VBScriptの正規表現」としては正しいものではないですね。
がんばって書き換えてください。

投稿日時 - 2009-08-11 10:41:47

補足

.NET Frameworkを使えば特にVSなどの有料ソフトを買わなくてもVB.NEtやC#.NETを使えるようなので、それでしのごうと思います。
どうもありがとうございました。
個人的にはVBScriptやWord VBAのRegexpが.NET互換でないというのが意外でした。
(分ける必要性を感じないので~)

投稿日時 - 2009-08-12 14:40:28

お礼

ありがとうございます。
てっきりVBScriptの正規表現は.NET互換かと思っていました。
もともとの目的を言うと、.NET正規表現を設定ファイルとして使うアプリケーションの動作をチェックするために、簡単な正規表現チェッカーを作りたかったのでした。
よって、VBA / VBScriptを使って正規表現マッチを使う動作がしたいのが目的ではなく、.NET正規表現を動かすのが目的でした。
Expressoを使えばいいというアドバイスはもらっているのですが、対話式なので、バッチでだーっと複数の表現を複数のデータに当てるということができないので、能率が悪いと思っています。
ということで、.NET正規表現を使う簡便な方法はあるでしょうか。

.NET Frameworkを使えば VS を使わなくても C# が使えるようなので、C#でゴミプロを作って動かせばいいのかなあという気がしますが、やはりスクリプト言語がよいです。

投稿日時 - 2009-08-11 14:36:43

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問