Home > Blockchain >  Regexmatch certain characters and ends with
Regexmatch certain characters and ends with

Time:12-17

I need a regex to match pieces starting with "[", containing "hi" and ending with "|]".

Input: [he] [picks] [him.|]

Match: [him.|]

Input: [it's] [his|] [word.|]

Match: [his|]

I got started with \[\S*?\|\], but I don't know how to add the condition that it only needs to match it when it contains 'hi'.

CodePudding user response:

You could say "Starts with [, doesn't end with ], contains hi, doesn't end with ], ends with |]":

\[[^\]]*hi[^\]]*\|\]

\[                    Starts with [
  [^\]]*              Contains no ]
        hi            Contains hi
          [^\]]*      Contains no ]
                \|\]  Ends with |]

Examples:

CodePudding user response:

You can use

\[[^[]*?hi.*?\|]
\[(?:(?!\|])[^[])*hi.*?\|]

See the regex demo #1 and regex demo #2.

Details:

  • \[ - a [ char
  • [^[]*? - zero or more chars other than [ as few as possible
  • (?:(?!\|])[^[])* - any char other than a [ char, zero or more but as many as possible occurrences, that does not start a |] char sequence (this second pattern is more reliable, but is also more complex)
  • hi - hi string
  • .*? - any zero or more chars other than line break chars as few as possible
  • \|] - |] string.
  • Related