Community
    • Login

    Stop RegEx search after finding a specific character

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    copy and pasteregexhighlightingsearch feature
    6 Posts 3 Posters 4.9k Views 2 Watching
    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 Offline
      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 Offline
        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 Offline
          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 Offline
            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 Offline
              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 Online
                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

                Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                With your input, this post could be even better 💗

                Register Login
                • First post
                  Last post
                The Community of users of the Notepad++ text editor.
                Powered by NodeBB | Contributors