2017-10-23 1 views
0

Hi, also habe ich über reguläre Ausdrücke gelesen und all das aber nicht wirklich vollständig verstanden. Ich suche hier nach einigem Suchen hier und Google nach ein wenig Hilfe.Tokens auf der Vorderseite eines regulären Ausdrucks in Powershell ignorieren

Ich habe eine XML-Datei, die ich bearbeite, aber jetzt tun wir so, als ob ich nur eine einzige Zeichenfolge mache. Das funktioniert gut, außer dass ich Connection Database = "SQLEventLog" Text in der Ersetzung verlieren. Was für ein Ignorier Token verwende ich hier?

Hier ist mein Code

$passedString = '<Connection Database="SQLEventLog"  >Data 
Source=;Initial Catalog=Connector;Integrated Security=True</Connection>' 

search($passedString) 

function search ($string) 
{ 
    $pattern = '*Data Source=*' 

    if ($string -like '*Data Source=*') 
    { 
     Write-Warning 'found' 
     $string = $string -replace '.*Data Source=*', 'Data 
     Source=localhost' 
    } 

    Write-Warning $string 
} 

Antwort

0

Also, ein paar Dinge. Best-Practice für die Definition von Funktionsparametern ist die Verwendung der Klausel Param(). Funktionen in PowerShell werden nicht mit Klammern, sondern durch Leerzeichen getrennt (z. B. Function arg1 arg2 Arrayarg3,Arrayarg3)

Darüber hinaus verwendet der Vergleichsoperator -like nicht regex, es ist ein Platzhaltervergleich. Ich habe Ihr Beispiel aktualisiert, um Ihr Ziel zu erreichen.

Function Search 
{ 
    Param($String) 

    If ($String -like '*Data Source=*') 
    { 
     Write-Warning 'found' 
     $string = $string -replace 'Data\sSource=', 'Data Source=localhost' 
    } 

    Write-Warning $string 
} 

$passedString = 'Data Source=;Initial Catalog=Connector;Integrated Security=True' 

Search $passedString 

Hinweis: Die -replace Funktion nicht regex für das erste Stück.

+0

danke das ist viel einfacher als das, was ich getan habe. Getestet und es funktioniert. – LINQtothepast

Verwandte Themen