Home > Software design >  Is there a regex that will match a string that does not contain a (non) fixed width string?
Is there a regex that will match a string that does not contain a (non) fixed width string?

Time:08-10

Here are two example strings:

'If <Person>, is for any reason unwilling or unable to serve, <next.Person > shall instead serve as successor agent.'

'If <Person>, is for any reason unwilling or unable to serve, <next.Person> shall instead serve as successor agent.'

I'm looking to match the second, and not the first, there can be no whitespaces inside the <>'s. I've tried several answers on SO, negative lookbehind will not work because the chars inside the <> are not fixed width.

I'm looking for a pattern that would match everything inside the '''s when none of the <> sections contain a space (\s to be regex-specific). As shown in the example above there can be multiple <>'s inside the string, and the string can contain pretty much any valid characters outside of the pattern I wish to exclude.

CodePudding user response:

You can use

^(?:<[^\s<>]*>|[^<>])*$

See the regex demo.

Details:

  • ^ - start of string
  • (?:<[^\s<>]*>|[^<>])* - zero or more occurrences of
    • <[^\s<>]*> - a <, zero or more chars other than <, > and whitespace and then a > char
    • | - or
    • [^<>] - a char other than < and >
  • $ - end of string.
  • Related