よろしくお願いします。
標題の通りです。
VBAでツール->参照設定からMS RegExpをオンにしています。
後方の一致と不一致は正常に動作しています(パターン1と2)。
ところが、前方に一致/不一致させようとしても、エラーになったり、期待通りの動作になりません。
そもそも、できないのでしょうか?
それとも、書き方が違うのでしょうか?
ネットで調べても該当する情報が見つけられませんでした。
よろしくお願いします。
Sub regextest()
target = "たとえばここにpineappleがあります。"
Set objRE = CreateObject("VBScript.RegExp")
objRE.Pattern = "pine(?!a)" 'パターン1 False、期待動作
'objRE.Pattern = "pine(?=a)" 'パターン2 True、期待動作
'objRE.Pattern = "(?<=に)pine" 'パターン4、test 実行時にエラー
'objRE.Pattern = "(<=に)pine" 'パターン5、False、しかしTrueになってほしい
'objRE.Pattern = "(?<!に)pine" 'パターン6、test 実行時にエラー
'objRE.Pattern = "(<!に)pine" 'パターン7、test 実行時にエラー
objRE.Global = True
res = objRE.test(target)
Debug.Print res
If res = True Then
Set hit = objRE.Execute(target)
For i = 0 To hit.Count - 1
Debug.Print hit(i)
Next i
End If
End Sub
No.2ベストアンサー
- 回答日時:
こんにちは。
気になっていたことなので、本日調べてみました。
VBScript の RegulaExp は、そんなに悪くはないものの、それは、VB系の関数などがあって、その足りない機能を補完できるからだと思います。
技術評論社の『正規表現』という本に、多少まとめてはあるので見てみましたが、ずいぶん少ないなって思います。
キャプチャー/クループの範囲では、
(●●●), \n [=n番目のキャブチャ),●●●|●●●,(?:●●●),(?=●●●),(?!●●●)
ご質問の内容で書かれているのは、Perl系ですが、
VBA/VBScript 系でもう少しバリエーションを持とうとすると、
Basp21 の BRegExp ぐらいです。この発展形 の オニグルマ(onigregexp/bregonig.dll)は、VBAには対応していません。それがあれば、もうちょっと別の使い方ができるわけですが。
http://www.hi-ho.ne.jp/babaq/basp21.html
BregExp/OnigRegExp 系のパターン
http://sakura-editor.sourceforge.net/htmlhelp/HL …
例:
Set bobj = CreateObject("Basp21")
ret = bobj.Replace("s/\w+(?!=apple)/$1/mk", Target)
BregExp は、">" が使えません。便利ではあるけれども、誰しも使っているわけではないのが、ネックかもしれません。また、もう10数年、誰も手付かずのままになっていて、そろそろ新しいものが出てきても良いとは思います。
No.1
- 回答日時:
こんにちは
VBAの正規表現は一般的なものに比べて弱い部分があるようで、戻り読みには対応していないのではないかと思います。(きちんと調べたわけではありませんが)
https://msdn.microsoft.com/ja-jp/library/cc39202 …
この表によると、たしかに。。。
しかも(?!pattern)の説明文が間違ってますね。。。(!にすべきところを=にしてる)
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) IBM Notes9のメールをExcelVBAにて送信するコードについての質問です。 以下のコードを 3 2023/06/21 17:58
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBScript.RegExp正規表現での後方参照
Visual Basic(VBA)
-
ExcelでRegExpのFunctionの作成
Excel(エクセル)
-
vbaの正規表現で、マッチした一部分を抽出したい
PowerPoint(パワーポイント)
-
-
4
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
5
正規表現の否定先読みで、複数の否定文字列を指定する方法はありませんか?
Perl
-
6
VBSのRegExpの拡張機能を有効にするには
Visual Basic(VBA)
-
7
VBAマクロ実行時エラーの修正について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ご教授願います PC初心者です。...
-
Basp21を使用してメール送信が...
-
ネットワーク接続を確認する手...
-
Access VBA レポートの日付範囲...
-
You Tube動画のダウンロードが...
-
VBSエラー
-
VBAで画像ファイルをダウンロー...
-
バッチスクリプト処理でエラー...
-
ソフトのインストール場所って...
-
誰かにサーバにあるデータを消...
-
大塚商会で新しくシステム、ス...
-
aptでインストールしたプログラ...
-
バッチファイルで多重起動を防ぐ
-
rshについて
-
Macの手書き漢字入力ツールにつ...
-
exeファイルの実行結果をテキス...
-
パソコン初心者です。 職場のパ...
-
mac os 10.6の入ったMac mini ...
-
ubuntuに外部侵入できるか
-
scriptコマンドで出力したログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Basp21を使用してメール送信が...
-
VBAのRegExpで後方一致/不一致...
-
エクセルVBA 実行時エラー 5029...
-
ネットワーク接続を確認する手...
-
クリップボードの内容をEXCELに...
-
三菱エコキュート 今朝 C21 エ...
-
VBからACCESSのレポートをプレ...
-
ご教授願います PC初心者です。...
-
Access VBA レポートの日付範囲...
-
PIC kit2 エラーについて
-
VBSエラー
-
スクリプトエラーが消えません
-
TOMCAT起動時エラー
-
VBからACCESSのレポート出力
-
7-zip22.01(x64)使用時に起きた...
-
旧バージョンのオープンオフィ...
-
ソフトのインストール場所って...
-
バッチスクリプト処理でエラー...
-
確定申告の資料の数字をパソコ...
-
バッチファイルでのスペースの入力
おすすめ情報