Search and Replace with Regex
Hi, I’m trying to clean up some very old code and try to use some RegEx in Notepad++.
I have a mix of variables:
the goal is to have only:
$somearr_name[‘some_key’] after substitution.
somearr_name and some_key should stay untouched
$somearr_name[$some_key] © and ‘$somearr_name[some_key]’ (D) should not be touched at all.
My Expression to find the matches is:
… but I have no idea, how to handle the replacement …
not really sure I get what you try to achieve but what about
Bring up the Replace window (ctrl+h).
Find what box:
Replace with box:
Search mode: Regular expression
Wrap around: ticked
Press the Replace All button.
ohhhh … it looks pretty! I’ll try little more und will give some response.
Did not know about \1 … because of my poor english and knowledge about the terminology in this case: How is this kind of replacement called.
How is this kind of replacement called
Hmmm, not sure exactly…maybe replacement by captured group number ? Go look it up and see if it has a better name.
Jens, welcome to the N++ community !
Seemingly, I understand that your goal is to obtain the
B)syntax, leaving the
Dsyntaxes untouched. In other words, you just would like that any
A)syntax be replaced with the
Bsyntax, wouldn’t you ?
Thus, we have to grab any
Asyntax, specifically, and change it into the
Comparing all syntaxes, it comes that only the
Asyntax does not contain any single quote character,
$symbol, between square brackets. We can add the rule that the variable name, before the square brackets does not contain any single quote, too !
On the other hand, the part before square brackets does not change, when moving from the
Bsyntax. So, we just need to store the text, between square brackets, and surround it with single quotes, during replacement !
So, a possible regex would be :
The beginning of the regex
\ssearches for the general kind of space character ( the Space or Tabulation chars, the
\rline break chars and some others… )
Then the part
\$looks for the literal regex symbol
Now, the syntax
[^'\r\n]+[searches the greatest non-null range of consecutive characters, different from a single quote and line-breaks chars, followed by a literal opening square bracket
The special syntax
\Kcancels any match and resets the regex engine working position
Thus, the part
([^'$\r\n]+)tries, now, to match the greatest non-null range of consecutive characters, either different from a single quote, a dollar and line-breaks chars, stored as group
1, due to the outer parentheses
But ONLY IF the look-ahead
(?=])is true, i.e. if this range is followed with an ending literal square bracket !
Finally, in replacement, the
\1syntax represents all group
1contents, surrounded with single quotes