Regex returning a non-capturing group??

This topic contains 3 replies, has 3 voices, and was last updated by Profile photo of Al Al 3 months ago.

  • Author
    Posts
  • #60651
    Profile photo of ca
    ca
    Participant

    Okay, so I am new to regex, or at least to actually writing them, but here is what I have:

    The reference string:

    LDAP://CN=Doe\, John,OU=Users,DC=my,DC=domain

    The regex (that is not working as expected):

    (?:LDAP://CN=)([a-zA-Z]+\\?[,\s]?\s?[a-zA-Z]+)

    Groups matched:

    LDAP://CN=Doe\, Joe
    Doe\, John

    Captured group:

    LDAP://CN=Doe\, John

    What I want to return:

    Doe, John

    By my understanding (which is obviously not correct) I was under the impression that if I included ?: for a captured group it would not return it in the match; and likewise, I do not want to return \ before the , in the middle of the name – which I actually do not know how to exclude a character in a returned result as such. Anyone able to shine some light on the matter?

    Thank you!!

    ca

  • #60666
    Profile photo of random commandline
    random commandline
    Participant

    If you want a non-named capture group, enclose what you want in parentheses. If you want a named capture group, use this syntax. (?'name'regex)

    $string = 'LDAP://CN=Doe\, John,OU=Users,DC=my,DC=domain'
    $string -match 'LDAP://CN=(.*),OU=Users' ; $Matches[1] –replace '\\'
    True
    Doe, John
    
    $string = 'LDAP://CN=Doe\, John,OU=Users,DC=my,DC=domain'
    $string -match "LDAP://CN=(?'name'.*),OU=Users" ; $Matches['name'] –replace '\\'
    True
    Doe, John
    
  • #60685
    Profile photo of Al
    Al
    Participant

    (?:pattern) is, really, a non capturing group. If you post just the pertinent part of your code, we'll be able to clarify your misunderstanding.

You must be logged in to reply to this topic.