VBScript preg_replace_callback 関数

正規表現検索および置換を行う


Function preg_replace_callback(pattern,callback,ByVal subject,limit,ByRef cnt)

    Dim key,counter
    cnt = 0
    If len(limit) = 0 Then limit = 0

    If isArray(subject) Then
        For key = 0 to uBound(subject)
            subject(key) = preg_replace( pattern, callback, subject(key),limit,cnt)
        Next
    ElseIf isObject(subject) Then
        For Each key In subject
            subject(key) = preg_replace( pattern, callback, subject(key),limit,cnt)
        Next
    Else

        If isArray(pattern) Then
                For key = 0 to uBound(pattern)
                    subject = preg_replace( pattern(key), callback, _
                                   subject,limit,cnt)
                Next

        Else

            Dim matchAll,strCallback
            If is_empty(limit) Then
                If preg_match_all(pattern, subject, matchAll,PREG_PATTERN_ORDER,") <> false Then
                    For Each key In matchAll(0)
                        execute("strCallback = " & callback & "(key)")
                        subject = Replace(subject,key,strCallback)
                    Next
                End If

            Else
                If preg_match_all(pattern, subject, matchAll,PREG_PATTERN_ORDER,") <> false Then
                    For Each counter In matchAll(0)
                        cnt = cnt + 1
                        If cnt > limit Then Exit For
                        execute("strCallback = " & callback & "(counter)")
                        subject = Replace(subject,counter,strCallback)
                    Next
                End If
            End If

        End If
    End If

    preg_replace_callback = subject

End Function

引数

pattern = mixed 検索を行うパターン。文字列もしくは配列とすることができます。
callback = mixed このコールバック関数は、検索対象文字列でマッチした要素の配列が指定されて コールされます。このコールバック関数は、置換後の文字列を返す必要があります。
subject = mixed 検索・置換対象となる文字列もしくは文字列の配列
limit = int subject 文字列において、各パターンによる 置換を行う最大回数。デフォルトは -1 (制限無し)。
cnt = int この引数が指定されると、置換回数が渡されます。

戻り値

subject 引数が配列の場合は配列を、 その他の場合は文字列を返します。
パターンがマッチした場合、〔置換が行われた〕新しい subject を返します。
マッチしなかった場合、subject をそのまま返します。

処理

・subject に関して pattern を用いて検索を行い、 callback に置換します。

その他の PHP regexp 関数