Abhishek G
Abhishek G

Reputation: 118

Regex matching of character class and special conditions on certain other conditions

I want to match a section of a string that contains certain characters repeated, along with certain other characters only given a certain criteria. For instance matching characters a-z contained in angle brackets and numbers only if the number is preceeded by a plus.

Matching <abcde> to abcde.

<abcde1> should not match anything.

Matching <abcde+1> to abcde+1 Matching <abcde+1asd+2+3+4as> to abcde+1asd+2+3+4as

<abcde+> should not match anything.

The regex I've tried is <([a-z]|(\+(?=[0-9])|[0-9](?<=[\+])))*>.

Upvotes: 1

Views: 35

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626926

You can use

(?<=<)(?:[a-zA-Z]+(?:\+\d+)*)+[a-zA-Z]*(?=>)
<((?:[a-zA-Z]+(?:\+\d+)*)+[a-zA-Z]*)>

See the regex demo. Details:

  • (?<=<) - a positive lookbehind that requires a < char immediately on the left
  • (?:[a-zA-Z]+(?:\+\d+)*)+ - one or more occurrences of
    • [a-zA-Z]+ - one or more letters
    • (?:\+\d+)* - zero or more sequences of + and one or more digits
  • [a-zA-Z]* - one or more ASCII letters
  • (?=>) - a positive lookahead that requires a > char immediately on the right.

Upvotes: 1

Related Questions