What this regex doing?



  • hello. I’m just playing with regex, and I discover an interesting thing:

    Search : ^(.+)$
    Replace by: $1\2

    Can anyone tell me what this regex-replace doing? Because, something is happen, even if it is not show. Because when I press undo (ctr+z), I notice that something was executed, but don’t now what. Everything is the same, but undo is working…





  • Hello Vasile Caraus,

    In replacement regex, the contents of a nth subset of parentheses, defining a group, in the search regex, may be written in THREE different ways :

    • From \1 to \9 So, this syntax is acceptable if you don’t have more than 9 capturing groups, in the search regex

    • From $0 to $N In the syntax $N N may be a number, greater than 10. I didn’t try it, but I suppose that N can be up to 65535 !!. Just note that $0 represents the totality of the match, whereas $1 stands for group 1, $2 stands for group 2 and so on…

    • From ${0} to ${N}, with the SAME syntax as above. This said, what is the interest to surround the number by curly braces ? Do you guess it…

    Well just imagine that you want, for instance, to rewrite, in replacement, the contents of group1, but preceded and followed by the string 999. At first sight, you would simply write 999$1999. However, after replacement, you just obtain the string 999 !
    Because the regex engine thinks that you want to write the literal string 999, followed by the contents of group $1999. As, of course, this group does not exists in the search regex, it just replace the non-defined group $1999 by an empty string !

    Therefore, the solution consists to use the third and right syntax, giving the replacement regex 999${1}999


    So, Vasile Caraus, when you write $1\2, in replacement ( or also $1$2, \1$2 or \1\2 ) as you didn’t define a second group, in the search regex, this is just equivalent to the simple \1 or $1 syntax.

    And, as the group 1 (.+) represents all the standard characters of a NON-empty line, between the two assertions Beginning and End of line, you just replace any line by itself !!

    Then, it’s obvious that hitting CTRL-Z cancels each S/R, giving back the identical original lines :-))

    Best Regards,

    guy38


Log in to reply