none
regular expression string+Pattern RRS feed

  • Frage

  • Hallo,

    I have a Problem with a regular Expression. I want to check if the Connection ID of a NIC is like "LAN-"&IP-Address".

    I 'm confused, because

    "LAN-150.200.39.120"  -match "^LAN-*" return True

    "LAN-150.200.39.120"  -match \d{1,3}\.\d{1,3}\d{1,3}\.\d{1,3}$" return True

    "LAN-150.200.39.120"  -match "^LAN-\d{1,3}\.\d{1,3}\d{1,3}\.\d{1,3}$" return False, BUT seems to work on the regex Tester on regexlib.com.

    Has somebody a hint, how to concatenate a string and a expression together?

    Background: in a SCCM (2007) OSD TS, all the Non-Used physical-NIC will be disabled, (the NIC Connection IDs for the remaining used NICs are passed as TS-Variable %OSDAdapter0Name%).

    My PS command is the following:

    powershell.exe -command "& {Get-WMIObject Win32_NetworkAdapter | Where-Object {($_.PhysicalAdapter -eq $true) -and ($_.NetConnectionID -notmatch '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$')} | ForEach-Object {$_.Disable()}}"

    Kindly Regards

    Frederic

    Dienstag, 5. November 2013 11:08

Antworten

  • Hi, this is the german forum, so i will answer in german.

    Im kompletten Regex (das das False auswirft) fehlt dir ein Punkt ("\.") in der mitte:

    "LAN-150.200.39.120"  -match "^LAN-\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"  

    dann gehts.

    Deine Konfusion liegt daran, das deine falsche Regex-Formel auch auf den hinteren Teil des Strings passt. Das hier:

    "LAN-150.200.39.120"  -match \d{1,3}\.\d{1,3}\d{1,3}\.\d{1,3}$" return True 

    geht trotz fehlendem Punkt, da du in Text ausgedrückt folgendes prüfst:
    1 bis 3 Zahlen, Punkt, 1 bis 3 Zahlen, 1 bis 3 Zahlen, Punkt, 1 bis 3 Zahlen.

    Das passt eben auch, da die letzten drei Zahlenpakete dieser Regel entsprechen und somit die Regel "wahr" ist.

    Fügst du das ganze aber dann zusammen, kommt false heraus, da eben in Wirklichkeit vier  Zahlenpakete vorhanden sind.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com
    Powershell Codesnippet Manager: Link

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort


    Dienstag, 5. November 2013 13:23
    Moderator

Alle Antworten

  • Hi, this is the german forum, so i will answer in german.

    Im kompletten Regex (das das False auswirft) fehlt dir ein Punkt ("\.") in der mitte:

    "LAN-150.200.39.120"  -match "^LAN-\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"  

    dann gehts.

    Deine Konfusion liegt daran, das deine falsche Regex-Formel auch auf den hinteren Teil des Strings passt. Das hier:

    "LAN-150.200.39.120"  -match \d{1,3}\.\d{1,3}\d{1,3}\.\d{1,3}$" return True 

    geht trotz fehlendem Punkt, da du in Text ausgedrückt folgendes prüfst:
    1 bis 3 Zahlen, Punkt, 1 bis 3 Zahlen, 1 bis 3 Zahlen, Punkt, 1 bis 3 Zahlen.

    Das passt eben auch, da die letzten drei Zahlenpakete dieser Regel entsprechen und somit die Regel "wahr" ist.

    Fügst du das ganze aber dann zusammen, kommt false heraus, da eben in Wirklichkeit vier  Zahlenpakete vorhanden sind.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com
    Powershell Codesnippet Manager: Link

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort


    Dienstag, 5. November 2013 13:23
    Moderator
  • Hallo Denniver.

    Fehler lag echt im Detail. Es klappt jetzt.

    Danke und viele Grüßen

    Frederic

    Mittwoch, 6. November 2013 10:08