Jump to content
Sign in to follow this  
BlueBandana

How do I get the output of the matching pattern?

Recommended Posts

 Is there a way to output the regex matches into a file?

I have a script to compare two files and check for regex matches.

I want to output the matching regex of 'testexample.txt' to another file.

#include <MsgBoxConstants.au3>
#include <Array.au3>

$Read = FileReadToArray("C:\Users\admin\Documents\testexample.txt")
$Dictionary = FileReadToArray("C:\Users\admin\Documents\example.txt")

For $p = 0 To UBound($Dictionary) - 1 Step 1
    $pattern = $Dictionary[$p]
        For $i = 0 To UBound($Read) - 1 Step 1
        $regex = $Read[$i]

            If StringRegExp($regex, $pattern, 0) Then
                MsgBox(0, "ResultsPass", "The string is in the file, highlighted strings: " )
            Else
                MsgBox(0, "ResultsFail", "The string isn't in the file.")
            EndIf
        Next
Next

 

Share this post


Link to post
Share on other sites

It sounds like you're looking for just the matching section to be written to the file, if so, check out the help page for StringRegExp and read up on the flag parameter.

Edit: I would guess you're looking for Flag 3, but you can use this to check... I wrote this because I couldn't understand the what the flags did. Hope it helps :)

#include <Array.au3>

RegExpExample()

Func RegExpExample()

    Local $sTest = '<test>a</test> <test>b</test> <test>c</Test>'
    Local $sPattern = '(?i)<test>(.*?)</test>'
    Local $vResult

    For $iFlag = 0 To 4
        $vResult = StringRegExp($sTest, $sPattern, $iFlag)
        If @error Then
            ConsoleWrite("!    StringRegExp Error: " & @error & @CRLF & @TAB & "  Flag: " & $iFlag & @CRLF)
        ElseIf IsArray($vResult) Then
            If $iFlag = 4 Then
                For $i=0 To UBound($vResult) - 1
                    If IsArray($vResult[$i]) Then
                        _ArrayDisplay($vResult[$i], "Flag " & $iFlag & " Part " & $i & "- StringRegExp Result")
                    EndIf
                Next
            Else
                _ArrayDisplay($vResult, "Flag " & $iFlag & " - StringRegExp Result")
            EndIf
        Else
            MsgBox(0, "Flag " & $iFlag & " StringRegExp Result", $vResult)
        EndIf
    Next
EndFunc
Edited by seadoggie01

All my code provided is Public Domain... but it may not work. ;) Use it, change it, break it, whatever you want.

Spoiler

My Humble Contributions:
Personal Function Documentation - A personal HelpFile for your functions
Acro.au3 UDF - Automating Acrobat Pro
ToDo Finder - Find #ToDo: lines in your scripts

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By FrancescoDiMuro
      Good morning
      I'm playing with SRE and trying to obtain some information from a test file.
      I was testing the pattern on regex101, but when I bring it to AutoIt, it doesn't return the same result as on regex101.
      I am surely (?:missing some important notes about PCRE engine|the pattern is not correct at all).
      Script:
      #include <Array.au3> #include <StringConstants.au3> Test() Func Test() Local $strFileName = @ScriptDir & "\TestFile.txt", _ $strFileContent, _ $arrResult $strFileContent = FileRead($strFileName) If @error Then Return ConsoleWrite("FileRead ERR: " & @error & @CRLF) $arrResult = StringRegExp($strFileContent, '(?sx)User:\h([^\n]+)\n' & _ 'Login\-name:\h([^\n]+)\n' & _ '(?:CaseSensitive:\h([^\n]+)\n)?' & _ 'NTSecurity:\h([^\n]+)\n' & _ '(?:NO\n)?' & _ '(?:Domain:\h([^\n]+)\n)?' & _ 'Timeout:\h([^\n]+)\n' & _ '.*?' & _ 'Member:\h([^\n]+)\n', $STR_REGEXPARRAYGLOBALMATCH) If IsArray($arrResult) Then _ArrayDisplay($arrResult) EndFunc Test file:
      User: AMMINISTRATORE Login-name: ADM CaseSensitive: YES NTSecurity: NO NO Timeout: 00:05:00 Member: AMMINISTRATORI User: Test_User Login-name: Test_User NTSecurity: YES Domain: DNEU Timeout: 00:00:00 Member: OPERATORS Member: OPERATORS Any help (even from cats) it's highly appreciated.

      Cheers
    • By Tosyk
      Hi,
      Please help me to change metasymbol line. Right now I have this condition code:
      If StringInStr($_sName, 'TEXT ') Then $_sName = StringRegExpReplace($_sName, '(^.*)\TEXT (.*)$', '$2') $_sName = StringRegExpReplace($_sName, '(^.*)\ (.*)$', '$1') If Not CheckIsSave_($_sName) Then It work fine with this text file and finds each line which start from 'TEXT':
      Material B7E671143D244B ==================================== TEXT 2F3139D816C34D 1 TEXT B6A968EF2505A2 1 TEXT 35206697A04F91 1 TEXT EB485AF490D83D 1 TEXT 0DAB42294BD9B3 1 TEXT 3D6525BEE360E1 0 Material D6906B886B06E3 ==================================== TEXT 0CCECCCCFB62AE 1 TEXT 1E14CB29AB43F0 1 TEXT FB7F0DCE9B5950 1 But I have a new text file now the lines of which now are start with 0:, 1: and so on:
      sm_0 --------------- 0: dummy_gray 1: c_com_socksa_mt 2: c_com_socksa_tn 3: dummy_white 4: default_z 5: dummy_nmap 6: --- 7: --- sm_1 --------------- 0: c_com_prisoner_shoes_di 1: c_com_prisoner_shoes_mt 2: c_com_prisoner_shoes_tn 3: dummy_white 4: default_z 5: c_com_leatherb_rt 6: --- 7: --- how to change (or add) the condition code above to work with new text file?
      I'm trying to change this script: http://autoit-script.ru/threads/poisk-fajlov-rekursivno-po-dannomu-spisku.26970/post-148646
       
    • By seadoggie01
      I'm trying to capture everything after a "#ToDo" in my scripts. I got that like this:
      (?i)[^\v]*#todo(.*) But then I thought it would be nice to use underscores to continue the ToDo... kind of like this:
      #ToDo: This is a really long explanation about something _ # that is very in-depth and needs to take up a lot of _ # space in a ToDo comment Global $variables = "Bad" I can't seem to capture everything... and maybe I'm trying to do too much with Regex... I keep trying variations of this:
      Condensed Version: (?im)[^\v]*#todo(?:([^\v]*)_\s*)*#([^\v]*) Expanded with comments (?ixm)(?# Ignore case, ignore newlines in Regex, use multiline option)# [^\v]*(?# Match leading space/s)# \#todo(?# Match the #todo)# (?:([^\v]*)_\s*)*(?# Match lines ending with _)# \#([^\v]*)(?# Last line only, no _'s)# I never seem to be able to build an array well with Regex... I saw something once about not being able to capture repeated patterns, and I think that's my issue
    • By genius257
      Inspired by PHP's preg_split.
      Split string by a regular expression.
      Also supports the same flags as the PHP equivalent.
      v1.0.1
       
      Example:
      #include "StringRegExpSplit.au3" StringRegExpSplit('splitCamelCaseWords', '(?<=\w)(?=[A-Z])') ; ['split', 'Camel', 'Case', 'Words']  
×
×
  • Create New...