Community

    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    Search and Replace with Regex

    Help wanted · · · – – – · · ·
    5
    8
    3556
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • jens ubert
      jens ubert last edited by

      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:

      A: $somearr_name[some_key]
      B: $somearr_name[‘some_key’]
      C: $somearr_name[$some_key]
      D: ‘$somearr_name[some_key]’

      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.

      1 Reply Last reply Reply Quote 0
      • jens ubert
        jens ubert last edited by

        My Expression to find the matches is:

        [^‘]$(.*?)[^$][^’]

        … but I have no idea, how to handle the replacement …

        Ekopalypse Alan Kilborn 2 Replies Last reply Reply Quote 1
        • Ekopalypse
          Ekopalypse @jens ubert last edited by

          @jens-ubert

          not really sure I get what you try to achieve but what about
          find what:(?<!')(\$[\w]+[)([\w]+)(?=])
          replace with:\1'\2'

          1 Reply Last reply Reply Quote 3
          • Alan Kilborn
            Alan Kilborn @jens ubert last edited by

            @jens-ubert

            Maybe try:

            Bring up the Replace window (ctrl+h).
            Find what box: (\$\w+)[(\w+)](?!')
            Replace with box: \1['\2']
            Search mode: Regular expression
            Wrap around: ticked
            Press the Replace All button.

            1 Reply Last reply Reply Quote 2
            • jens ubert
              jens ubert last edited by

              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.

              Alan Kilborn 1 Reply Last reply Reply Quote 0
              • Alan Kilborn
                Alan Kilborn @jens ubert last edited by

                @jens-ubert said:

                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.

                1 Reply Last reply Reply Quote 1
                • PeterJones
                  PeterJones last edited by

                  @jens-ubert said:

                  How is this kind of replacement called.

                  The Boost documentation calls it a “backreference”. In the replacement string, the $-based equivalent is called a “placeholder sequence”.

                  1 Reply Last reply Reply Quote 3
                  • guy038
                    guy038 last edited by guy038

                    Hello, @jens-ubert, @ekopalypse, @alan-kilborn, @peterjones, and All,

                    Jens, welcome to the N++ community !

                    Seemingly, I understand that your goal is to obtain the B) syntax, leaving the C) and D syntaxes untouched. In other words, you just would like that any A) syntax be replaced with the B syntax, wouldn’t you ?

                    Thus, we have to grab any A syntax, specifically, and change it into the B one

                    Comparing all syntaxes, it comes that only the A syntax does not contain any single quote character, ' nor the $ 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 A to the B syntax. 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 :

                    SEARCH \s\$[^'\r\n]+[\K([^'$\r\n]+)(?=])

                    REPLACE '\1'

                    Notes :

                    • The beginning of the regex \s searches for the general kind of space character ( the Space or Tabulation chars, the \n or \r line 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 \K cancels 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 \1 syntax represents all group 1 contents, surrounded with single quotes

                    Best Regards,

                    guy038

                    1 Reply Last reply Reply Quote 3
                    • First post
                      Last post
                    Copyright © 2014 NodeBB Forums | Contributors