セル内とループの両方でMicrosoft Excelの正規表現(Regex)を使用する方法


592

Excelで正規表現を使用して、データ操作にExcelの強力なグリッドのような設定を利用するにはどうすればよいですか?

  • 文字列内の一致したパターンまたは置換された値を返すセル内関数。
  • データの列をループし、隣接するセルへの一致を抽出するサブ。
  • どのような設定が必要ですか?
  • 正規表現用のExcelの特殊文字は何ですか?

私は、正規表現は、多くの状況には適していません理解して(正規表現を使用するために使用するかどうか?)Excelが使用できるのでLeftMidRightInstr同様の操作のためのタイプのコマンドを。


11
Patrick MatthewsによるこのVB / VBA Regexp記事
強く

1
この無料のアドインをお試しください:seotoolsforexcel.com/regexpfind
Niels Bosma

1
正規表現スタイルの機能の一種の軽量バージョンを提供するLike operatorを忘れないでください。subまたはfunctionプロシージャでラップされている場合でも、通常はregexよりはるかに高速です。
Egalth

回答:


955

正規表現はパターンマッチングに使用されます。

Excelで使用するには、次の手順に従います。

手順1:VBA参照を「Microsoft VBScript正規表現5.5」に追加する

  • [開発者]タブを選択します(このタブがありません。どうすればよいですか?
  • 「コード」リボンセクションから「Visual Basic」アイコンを選択します
  • 「Microsoft Visual Basic for Applications」ウィンドウで、トップメニューから「ツール」を選択します。
  • 「参照」を選択します
  • 「Microsoft VBScript正規表現5.5」の横のボックスをオンにして、ワークブックに含めます。
  • 「OK」をクリック

ステップ2:パターンを定義する

基本的な定義:

- 範囲。

  • たとえばa-z、aからzまでの小文字に一致します
  • たとえば0-5、0から5までの任意の数値に一致します

[] これらの括弧内のオブジェクトの1つと正確に一致します。

  • たとえば[a]、文字aに一致します
  • たとえば[abc]、a、b、cの1文字に一致します
  • たとえば[a-z]、アルファベットの単一の小文字に一致します。

()リターンの目的で異なる一致をグループ化します。以下の例を参照してください。

{} その前に定義されたパターンの繰り返しコピーの乗数。

  • たとえば、[a]{2}2つの連続した小文字aに一致します。aa
  • 例えば[a]{1,3}、少なくとも1と最大3つの小文字に一致しaaaaaa

+ その前に定義されたパターンの少なくとも1つ以上に一致します。

  • 例えば、a+一致する連続したAさんaaaaaa、など

? その前に定義されたパターンのゼロまたは1つに一致します。

  • たとえば、パターンは存在する場合と存在しない場合がありますが、一致できるのは1回だけです。
  • たとえば、[a-z]?空の文字列または単一の小文字に一致します。

* その前に定義されたゼロ個以上のパターンに一致します。-たとえば、存在する場合と存在しない場合があるパターンのワイルドカード。-たとえば、[a-z]*空の文字列または小文字の文字列に一致します。

. 改行以外の任意の文字に一致します \n

  • 例:a.aで始まり、次を除くすべてで終わる2文字の文字列に一致します。\n

| OR演算子

  • たとえばa|b、どちらかaまたはb一致することを意味します。
  • たとえばred|white|orange、色の1つと正確に一致します。

^ NOT演算子

  • たとえば、[^0-9]文字に数字を含めることはできません
  • たとえば、[^aA]文字を小文字aまたは大文字にすることはできませんA

\ 後続の特殊文字をエスケープします(上記の動作をオーバーライドします)

  • 例えば\.\\\(\?\$\^

アンカーパターン:

^ 文字列の先頭で一致する必要があります

  • たとえば、^a最初の文字は小文字でなければなりませんa
  • たとえば、^[0-9]最初の文字は数字でなければなりません。

$ 文字列の最後で一致する必要があります

  • たとえば、a$最後の文字は小文字でなければなりませんa

優先順位表:

Order  Name                Representation
1      Parentheses         ( )
2      Multipliers         ? + * {m,n} {m, n}?
3      Sequence & Anchors  abc ^ $
4      Alternation         |

定義済みの文字の略語:

abr    same as       meaning
\d     [0-9]         Any single digit
\D     [^0-9]        Any single character that's not a digit
\w     [a-zA-Z0-9_]  Any word character
\W     [^a-zA-Z0-9_] Any non-word character
\s     [ \r\t\n\f]   Any space character
\S     [^ \r\t\n\f]  Any non-space character
\n     [\n]          New line

例1マクロとして実行

次のマクロ例は、セルの値A1を調べて、最初の1文字または2文字が数字であるかどうかを確認します。存在する場合は削除され、残りの文字列が表示されます。一致しない場合は、一致するものが見つからないことを示すボックスが表示されます。のセルA1値は12abcを返しabc、の値は1abcを返しabc、の値はabc123「一致しない」を返します。これは、数字が文字列の先頭になかったためです。

Private Sub simpleRegex()
    Dim strPattern As String: strPattern = "^[0-9]{1,2}"
    Dim strReplace As String: strReplace = ""
    Dim regEx As New RegExp
    Dim strInput As String
    Dim Myrange As Range

    Set Myrange = ActiveSheet.Range("A1")

    If strPattern <> "" Then
        strInput = Myrange.Value

        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If regEx.Test(strInput) Then
            MsgBox (regEx.Replace(strInput, strReplace))
        Else
            MsgBox ("Not matched")
        End If
    End If
End Sub

例2セル内関数として実行

この例は例1と同じですが、セル内関数として実行するように設定されています。使用するには、コードを次のように変更します。

Function simpleCellRegex(Myrange As Range) As String
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim strReplace As String
    Dim strOutput As String


    strPattern = "^[0-9]{1,3}"

    If strPattern <> "" Then
        strInput = Myrange.Value
        strReplace = ""

        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = strPattern
        End With

        If regEx.test(strInput) Then
            simpleCellRegex = regEx.Replace(strInput, strReplace)
        Else
            simpleCellRegex = "Not matched"
        End If
    End If
End Function

文字列( "12abc")をセルに配置しますA1。この数式=simpleCellRegex(A1)をセルに入力するB1と、結果は「abc」になります。

結果画像


例3範囲のループ

この例は例1と同じですが、セルの範囲をループします。

Private Sub simpleRegex()
    Dim strPattern As String: strPattern = "^[0-9]{1,2}"
    Dim strReplace As String: strReplace = ""
    Dim regEx As New RegExp
    Dim strInput As String
    Dim Myrange As Range

    Set Myrange = ActiveSheet.Range("A1:A5")

    For Each cell In Myrange
        If strPattern <> "" Then
            strInput = cell.Value

            With regEx
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = strPattern
            End With

            If regEx.Test(strInput) Then
                MsgBox (regEx.Replace(strInput, strReplace))
            Else
                MsgBox ("Not matched")
            End If
        End If
    Next
End Sub

例4:異なるパターンを分割する

この例では、範囲(A1A2A3)をループして、3桁で始まり、その後に1つの英字と4桁の数字が続く文字列を探します。出力は、を使用してパターンマッチを隣接するセルに分割し()ます。 $1の最初のセット内で一致した最初のパターンを表し()ます。

Private Sub splitUpRegexPattern()
    Dim regEx As New RegExp
    Dim strPattern As String
    Dim strInput As String
    Dim Myrange As Range

    Set Myrange = ActiveSheet.Range("A1:A3")

    For Each C In Myrange
        strPattern = "(^[0-9]{3})([a-zA-Z])([0-9]{4})"

        If strPattern <> "" Then
            strInput = C.Value

            With regEx
                .Global = True
                .MultiLine = True
                .IgnoreCase = False
                .Pattern = strPattern
            End With

            If regEx.test(strInput) Then
                C.Offset(0, 1) = regEx.Replace(strInput, "$1")
                C.Offset(0, 2) = regEx.Replace(strInput, "$2")
                C.Offset(0, 3) = regEx.Replace(strInput, "$3")
            Else
                C.Offset(0, 1) = "(Not matched)"
            End If
        End If
    Next
End Sub

結果:

結果画像


追加のパターンの例

String   Regex Pattern                  Explanation
a1aaa    [a-zA-Z][0-9][a-zA-Z]{3}       Single alpha, single digit, three alpha characters
a1aaa    [a-zA-Z]?[0-9][a-zA-Z]{3}      May or may not have preceding alpha character
a1aaa    [a-zA-Z][0-9][a-zA-Z]{0,3}     Single alpha, single digit, 0 to 3 alpha characters
a1aaa    [a-zA-Z][0-9][a-zA-Z]*         Single alpha, single digit, followed by any number of alpha characters

</i8>    \<\/[a-zA-Z][0-9]\>            Exact non-word character except any single alpha followed by any single digit

22
を忘れないでくださいSet regEx = Nothing。そのSubが頻繁に実行されると、メモリ不足例外が発生します。
Kiril、2015年

1
私は例4を適応サブマッチ誰もが興味を持っている場合は、基本的に私は、とき分割置き換える使用しない、より複雑な正規表現を治療するために:stackoverflow.com/questions/30218413/...
Armfoot

11
遅延バインディングライン:Set regEx = CreateObject("VBScript.RegExp")
ZygD 2015

2
わかりましたThisWorkbook。コードがにあるためです。コードを別のに移動してみてくださいModule
ポートランドランナー、

3
「プロジェクトエクスプローラ」の@PortlandRunner(?)ファイルを右クリックして「モジュールの挿入」を選択し、「モジュール1」をダブルクリックしてコードを貼り付けました。保存しました。ワークブックに戻り、関数を再度キー入力しました-機能しました。私のような経験の浅い人のために、答えで注目に値するかもしれませんか?助けてくれてありがとう。
youcantryreachingme

205

Excelの数式で直接正規表現を使用するには、次のUDF(ユーザー定義関数)が役立ちます。それは多かれ少なかれ直接正規表現機能をExcel関数として直接公開します。

使い方

2〜3個のパラメータを取ります。

  1. 正規表現を使用するテキスト。
  2. 正規表現。
  3. 結果の外観を指定するフォーマット文字列。それは含めることができ$0$1$2、とのように。$0は完全一致で$1、upは正規表現のそれぞれの一致グループに対応します。デフォルトは$0です。

いくつかの例

メールアドレスの抽出:

=regex("Peter Gordon: some@email.com, 47", "\w+@\w+\.\w+")
=regex("Peter Gordon: some@email.com, 47", "\w+@\w+\.\w+", "$0")

結果: some@email.com

複数の部分文字列を抽出する:

=regex("Peter Gordon: some@email.com, 47", "^(.+): (.+), (\d+)$", "E-Mail: $2, Name: $1")

結果: E-Mail: some@email.com, Name: Peter Gordon

1つのセル内の結合された文字列を複数のセル内のコンポーネントに分解するには:

=regex("Peter Gordon: some@email.com, 47", "^(.+): (.+), (\d+)$", "$" & 1)
=regex("Peter Gordon: some@email.com, 47", "^(.+): (.+), (\d+)$", "$" & 2)

結果:Peter Gordon some@email.com...

使い方

このUDFを使用するには、次の操作を行います(おおよそこのMicrosoftページに基づいています。そこには、いくつかの優れた追加情報があります)。

  1. マクロが有効なファイル( '.xlsm')のExcelでALT+F11Microsoft Visual Basic for Applications Editorを押して開きます
  2. VBA参照を正規表現ライブラリに追加します(Portland Runners ++ answerから恥知らずにコピーされます):
    1. [ ツール] -> [ 参照]をクリックします(ドイツのスクリーンショットはご遠慮ください)。 ツール->リファレンス
    2. リストからMicrosoft VBScript正規表現5.5を見つけ、その横にあるチェックボックスをオンにします。
    3. OKをクリックします。
  3. [ モジュールの挿入]をクリックします。モジュールに別の名前を付ける場合は、モジュールに以下のUDFと同じ名前がないことを確認してください(たとえば、モジュールに名前を付けてRegex、関数regex#NAME!エラーを引き起こす)。

    アイコン行の2番目のアイコン->モジュール

  4. 中央の大きなテキストウィンドウに以下を挿入します。

    Function regex(strInput As String, matchPattern As String, Optional ByVal outputPattern As String = "$0") As Variant
        Dim inputRegexObj As New VBScript_RegExp_55.RegExp, outputRegexObj As New VBScript_RegExp_55.RegExp, outReplaceRegexObj As New VBScript_RegExp_55.RegExp
        Dim inputMatches As Object, replaceMatches As Object, replaceMatch As Object
        Dim replaceNumber As Integer
    
        With inputRegexObj
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = matchPattern
        End With
        With outputRegexObj
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = "\$(\d+)"
        End With
        With outReplaceRegexObj
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
        End With
    
        Set inputMatches = inputRegexObj.Execute(strInput)
        If inputMatches.Count = 0 Then
            regex = False
        Else
            Set replaceMatches = outputRegexObj.Execute(outputPattern)
            For Each replaceMatch In replaceMatches
                replaceNumber = replaceMatch.SubMatches(0)
                outReplaceRegexObj.Pattern = "\$" & replaceNumber
    
                If replaceNumber = 0 Then
                    outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).Value)
                Else
                    If replaceNumber > inputMatches(0).SubMatches.Count Then
                        'regex = "A to high $ tag found. Largest allowed is $" & inputMatches(0).SubMatches.Count & "."
                        regex = CVErr(xlErrValue)
                        Exit Function
                    Else
                        outputPattern = outReplaceRegexObj.Replace(outputPattern, inputMatches(0).SubMatches(replaceNumber - 1))
                    End If
                End If
            Next
            regex = outputPattern
        End If
    End Function
    
  5. Microsoft Visual Basic for Applications Editorウィンドウを保存して閉じます。


6
この回答とここでアドインを作成する手順を組み合わせると、非常に役立ちます。ありがとうございました。モジュールと関数に同じ名前を付けないでください!
Chris Hunt

2
上記のクリス・ハントのコメントを繰り返します。モジュールを「正規表現」と呼ばないでください。#NAMEエラーのために関数が機能しないため、しばらく怒っていると思っていました
Chris

さて、私はすべて(モジュール/名前の変更を含む)を試し、それでも#NAMEエラー> _> i.imgur.com/UUQ6eCi.png
Enissay

@Enissay:最小限のFunction foo() As Variant \n foo="Hello World" \n End FunctionUDFを作成して、それが機能するかどうかを確認してください。はいの場合、基本的な問題が何も起こらない場合(マクロは無効?)
PatrickBöker16年


64

急いでいる人のためのpatszim答えを拡張します。

  1. Excelブックを開きます。
  2. Alt+ F11VBA /マクロウィンドウを開きます。
  3. 下の正規表現への参照を追加ツール、その後の参照
    ![Excel VBAフォームに参照を追加
  4. Microsoft VBScript正規表現5.5を選択する
    ![Excel VBA正規表現参照を追加
  5. 新しいモジュールを挿入します(コードはモジュール内に常駐する必要があります。そうしないと機能しません)。
    ![Excel VBA挿入コードモジュール
  6. 新しく挿入されたモジュールで、
    ![Excel VBAモジュールにコードを挿入
  7. 次のコードを追加します。

    Function RegxFunc(strInput As String, regexPattern As String) As String
        Dim regEx As New RegExp
        With regEx
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .pattern = regexPattern
        End With
    
        If regEx.Test(strInput) Then
            Set matches = regEx.Execute(strInput)
            RegxFunc = matches(0).Value
        Else
            RegxFunc = "not matched"
        End If
    End Function
    
  8. 正規表現パターンはセルの1つに配置され、絶対参照が使用されます。 ![Excel regex関数のセル内使用 関数は、作成されたワークブックに関連付けられます。
    別のワークブックで使用する必要がある場合は、Personal.XLSBに関数を保存します。


1
作業中のすべてのExcelドキュメントで利用できるように、Personal.xlsbにある必要があることに言及していただきありがとうございます。他のほとんどの(?)答えはそれを明確にしません。Personal.XLSBはフォルダーに移動します(フォルダーを作成する必要がある場合があります)C:\ Users \ user name \ AppData \ Local \ Microsoft \ Excel \ XLStart folder
Mark Stewart

26

これが私の試みです:

Function RegParse(ByVal pattern As String, ByVal html As String)
    Dim regex   As RegExp
    Set regex = New RegExp

    With regex
        .IgnoreCase = True  'ignoring cases while regex engine performs the search.
        .pattern = pattern  'declaring regex pattern.
        .Global = False     'restricting regex to find only first match.

        If .Test(html) Then         'Testing if the pattern matches or not
            mStr = .Execute(html)(0)        '.Execute(html)(0) will provide the String which matches with Regex
            RegParse = .Replace(mStr, "$1") '.Replace function will replace the String with whatever is in the first set of braces - $1.
        Else
            RegParse = "#N/A"
        End If

    End With
End Function

9

これをセル関数(SUMまたはVLOOKUP)として使用する必要があり、次の操作が簡単であることがわかりました。

  1. マクロが有効なExcelファイル(xlsmとして保存)にいることを確認します。
  2. オープン開発ツールAlt+F11
  3. 他の回答と同様にMicrosoft VBScript正規表現5.5を追加します
  4. ワークブックまたは独自のモジュールで次の関数を作成します。

    Function REGPLACE(myRange As Range, matchPattern As String, outputPattern As String) As Variant
        Dim regex As New VBScript_RegExp_55.RegExp
        Dim strInput As String
    
        strInput = myRange.Value
    
        With regex
            .Global = True
            .MultiLine = True
            .IgnoreCase = False
            .Pattern = matchPattern
        End With
    
        REGPLACE = regex.Replace(strInput, outputPattern)
    
    End Function
  5. 次に、セルで使用できます=REGPLACE(B1, "(\w) (\d+)", "$1$2")(例: "A 243"から "A243")


このoutputPatternの命名は、私を驚かせました。代替値です。
トール

1
はい。名前付きパターンを残したので、それが単なる文字列置換ではなく、$ 1 $ 2などの正規表現一致グループを使用できることは明らかでした
DeezCashews

7

これは直接的な回答ではありませんが、検討のためのより効率的な代替手段を提供する可能性があります。つまり、Google Sheetsにはいくつかの正規表現関数が組み込まれており、これらは非常に便利で、Excelの技術的な手順のいくつかを回避するのに役立ちます。明らかに、PCでExcelを使用することにはいくつかの利点がありますが、大多数のユーザーにとって、Googleスプレッドシートは同じエクスペリエンスを提供し、移植性とドキュメントの共有にいくつかの利点を提供する可能性があります。

彼らは提案する

REGEXEXTRACT:正規表現に従って一致する部分文字列を抽出します。

REGEXREPLACE:正規表現を使用して、テキスト文字列の一部を別のテキスト文字列に置き換えます。

SUBSTITUTE:文字列内の既存のテキストを新しいテキストで置き換えます。

REPLACE:テキスト文字列の一部を別のテキスト文字列に置き換えます。

これらを直接セルに入力すると、好きなものが生成されます

=REGEXMATCH(A2, "[0-9]+")

また、次のようなIFステートメントなどの他の関数との組み合わせでも非常にうまく機能します。

=IF(REGEXMATCH(E8,"MiB"),REGEXEXTRACT(E8,"\d*\.\d*|\d*")/1000,IF(REGEXMATCH(E8,"GiB"),REGEXEXTRACT(E8,"\d*\.\d*|\d*"),"")

ここに画像の説明を入力してください

うまくいけば、これはExcelのVBSコンポーネントにうんざりしていると感じるユーザーに簡単な回避策を提供します。


アレックスを共有してくれてありがとう。これは、Googleバージョンをお探しの方に役立ちます。Googleスプレッドシートの正規表現には独自の命名法があり、他の人にとって非常に役立つので、Googleスプレッドシートの正規表現に固有の別の質問を書いて回答することを検討してください。とにかく、あなたは私の賛成票を持っています!
ポートランドランナー

4

これが regex_subst()関数です。例:

=regex_subst("watermellon", "[aeiou]", "")
---> wtrmlln
=regex_subst("watermellon", "[^aeiou]", "")
---> aeeo

これが単純化されたコードです(とにかく私にとっては単純です)。上記を使用して適切な出力パターンを作成し、私の例のように機能させる方法を理解できませんでした。

Function regex_subst( _
     strInput As String _
   , matchPattern As String _
   , Optional ByVal replacePattern As String = "" _
) As Variant
    Dim inputRegexObj As New VBScript_RegExp_55.RegExp

    With inputRegexObj
        .Global = True
        .MultiLine = True
        .IgnoreCase = False
        .Pattern = matchPattern
    End With

    regex_subst = inputRegexObj.Replace(strInput, replacePattern)
End Function

1

スクリプトを移植可能にする必要があるため、参照ライブラリを有効にする必要はありません。Dim foo As New VBScript_RegExp_55.RegExp行が発生しUser Defined Type Not Definedたエラーを、私は私のために働いた解決策を見つけました。

あなたがしたいことは、セルA1にサンプル文字列を入れて、あなたのをテストすることstrPatternです。それがうまくいったら、rng必要に応じて調整します。

Public Sub RegExSearch()
'/programming/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops
'https://wellsr.com/vba/2018/excel/vba-regex-regular-expressions-guide/
'https://www.vitoshacademy.com/vba-regex-in-excel/
    Dim regexp As Object
    'Dim regex As New VBScript_RegExp_55.regexp 'Caused "User Defined Type Not Defined" Error
    Dim rng As Range, rcell As Range
    Dim strInput As String, strPattern As String

    Set regexp = CreateObject("vbscript.regexp")
    Set rng = ActiveSheet.Range("A1:A1")

    strPattern = "([a-z]{2})([0-9]{8})"
    'Search for 2 Letters then 8 Digits Eg: XY12345678 = Matched

    With regexp
        .Global = False
        .MultiLine = False
        .ignoreCase = True
        .Pattern = strPattern
    End With

    For Each rcell In rng.Cells

        If strPattern <> "" Then
            strInput = rcell.Value

            If regexp.test(strInput) Then
                MsgBox rcell & " Matched in Cell " & rcell.Address
            Else
                MsgBox "No Matches!"
            End If
        End If
    Next
End Sub

私は私が移植できるように私のスクリプトを必要とするように、参照ライブラリを有効にする必要がありますする必要はありません - VBScript_RegExp_55ライブラリはかなりユビキタスので、特定のターゲットマシン上ではないという非常に低いリスクがあります。とにかく、アーリーバインドからレイトバインドに切り替えても、移植性の問題は解決されません(コードはコンパイル時ではなく実行時にのみエラーになります)
chris neilsen

1
いいえ、それはまったく真実ではありません。このスクリプトは、移植可能なものを有効にすることなく、別のユーザーと共有できます。ありがとうtho
FreeSoftwareServers

1
もちろん、RegExコードは使用できません。RegExのものが大きなライブラリブックの一部である場合、コンパイルエラーがスローされないので、他のパーツの使用を許可することは有用であると考えられます
chris neilsen

1

貴重なコンテンツを追加するために、VBA内のRegExが理想的でない場合がある理由について、このリマインダーを作成したいと思います。すべての表現がサポートされているわけではありませんが、代わりにがスローされError 5017、著者が推測する可能性があります(私は自分自身の犠牲者です)。

サポートされているものに関するいくつかのソースを見つけることができますが、サポートされていないメタ文字などを知っておくと役立ちます。より詳細な説明はここにあります。このソースで言及:

「ただし、VBScriptの正規表現...バージョン5.5は、以前のバージョンのVBScriptにはなかった、かなりの数の重要な正規表現機能を実装しています。... JavaScriptとVBScriptはPerlスタイルの正規表現を実装します。ただし、Perlやその他の最新の正規表現フレーバーで使用できる高度な機能が数多くありません。 "


したがって、サポートされていません

  • Start of String ancor \A、または、^キャレットを使用して、文字列の最初の文字の前の位置を照合します
  • End of String ancor \Z、または$ドル記号を使用して、文字列の最後の文字の後の位置を照合します
  • 正の先読み、例:((?<=a)b正の先読みサポートされている場合)
  • 負の先読み、例:((?<!a)b負の先読みサポートされている間)
  • 原子のグループ化
  • 所有数量詞
  • Unicode例: \{uFFFF}
  • 名前付きキャプチャグループ。または、番号付きのキャプチャグループを使用する
  • :インライン修飾、例えば/i(大文字と小文字の区別)や/gから(グローバル)などの設定は、これらのRegExpオブジェクトのプロパティ> RegExp.Global = TrueおよびRegExp.IgnoreCase = True利用可能な場合。
  • 条件付き
  • 正規表現コメント'スクリプトの通常のコメントでこれらを追加します

VBA内で正規表現を使用して、すでに複数回壁にぶつかっています。通常LookBehind、修飾子を忘れてしまいます。私はこれらの上記の背景をすべて自分自身で経験したわけではありませんが、さらに詳細な情報を参照しながら広範囲に及ぶようにしようと思いました。自由にコメント/修正/追加してください。豊富な情報のためにregular-expressions.infoに大声で叫んでください。

PSあなたは通常のVBAメソッドと関数に言及しました、そして私はそれらが(少なくとも私自身にとって)RegExが失敗するであろう独自の方法で役に立ったことを確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.