Community
    • Login

    Stop RegEx search after finding a specific character

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    copy and pasteregexhighlightingsearch feature
    6 Posts 3 Posters 3.9k Views
    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.
    • TTM 1895T
      TTM 1895
      last edited by

      Salutations, oh wise and venerable prophets of knowledge :)

      I have a .txt file that I have to open every day in N++ and must copy / paste data that occurs between brackets, i.e. [ stuff I have to copy must not include these brackets ]

      I have tried the following regex’s:
      (?<=[)[^}]+(?=]) — it gives me what I want – highlighted text in between brackets – but it goes to the very last ] in the entire document
      [([^]]+)([^]]+)] – it gives me what I want – it highlights only to the first ] it finds, but it includes the brackets [ ]

      What I would like, please, is a way that I can get both of those things in 1 expression, if possible

      The data I collect is in this format:
      ::Ihavechickenlegs::
      [I want to select the text
      on the following lines
      after the label listed above]

      ==================================
      ::Iampastylikedough::
      [This stinks to
      high heaven and I want
      a Big Mac]

      Claudia FrankC 1 Reply Last reply Reply Quote 2
      • Claudia FrankC
        Claudia Frank @TTM 1895
        last edited by

        @TTM-1895

        I assume you are looking for (?is)\[(?>(?!<\]).)*?\]
        I can’t get the credits for this as it is just a modification from one of the great
        posts from @guy038, but I wasn’t able to find the original post, the ones with the
        <record> solution, otherwise I would have pointed to it as it also had a good explanation
        what exactly it is doing.

        Cheers
        Claudia

        1 Reply Last reply Reply Quote 2
        • TTM 1895T
          TTM 1895
          last edited by

          Thank you for the quick response :)

          When I plugged in the expression you gave me, it had the same effect as my expression #2… it still includes the brackets in the highlight. I would like it to highlight everything ‘in between’ the brackets, as it does in my expression #1, but stop at the first ] it finds.

          Any other ideas?

          Thank you for your time and efforts. :)

          Claudia FrankC 1 Reply Last reply Reply Quote 0
          • Claudia FrankC
            Claudia Frank @TTM 1895
            last edited by Claudia Frank

            @TTM-1895

            I hope I finally understood your request, what about this (?is)(?<=\[)(?>(?!<\]).)*?(?=\]) regex.

            By the way, what do you mean by it stops after it found the first ] ?
            Something you could use to replace the first block of data in a couple of files
            or just in terms of selecting one block of data after the other?

            Cheers
            Claudia

            1 Reply Last reply Reply Quote 4
            • TTM 1895T
              TTM 1895
              last edited by

              Eureka! That last expression you gave me was perfect!

              I guess I wasn’t explaining accurately enough, but you sussed it out and gave me precisely what I needed.

              Thank you tremendously for your expertise and assistance. :)

              Be well… and Cheers!

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

                Hello, @ttm-1895, @claudia-frank and All,

                I think that the regex can be shortened, as below :

                (?s)(?<=\[).+?(?=\])

                Notes :

                • The (?s) modifier means that the dot regex character ( . ) represents any single char ( either a standard one or an EOL one )

                • The (?i) modifier is not necessary, as no letters or letter range(s) are involved in the discussed regexes

                • The main part of the regex is the .+? syntax, which catches the smallest NON-empty range of any character, which, either :

                  • is preceded by a literal [ symbol, due to the (?<=\[) positive look-behind structure

                  • is followed with a literal ] symbol, due to the (?=\]) positive look-ahead structure

                • Both [ and ] symbols must be escaped, with the \ symbol, to be interpreted as literals

                Cheers,

                guy038

                1 Reply Last reply Reply Quote 3
                • First post
                  Last post
                The Community of users of the Notepad++ text editor.
                Powered by NodeBB | Contributors