I have multiple records and I want to match specific strings and at the same time unmatched specific strings. I came up with one pattern but it matches all. Anyone can revise the pattern please?
Pattern: /PF\s*(?:XAP|FNI)?\s*O\/\s*(?:RG|VO|HS).*\s*\ ?(?!HSAC|VOG)/gm
Here are the records-
Here are the records should be matched:
PFO/RGETK
PFO/RGETK /RGETK
PFO/VOG /RGETK
PFO/VOG /VOG
PFO/RGETK /VOG
PFXAPO/RGETK
PFXAPO/RGETK /RGETK
PFXAPO/VOG /RGETK
PFXAPO/VOG /VOG
PFXAPO/RGETK /VOG
PFFNIO/RGETK
PFFNIO/RGETK /RGETK
PFFNIO/VOG /RGETK
PFFNIO/VOG /VOG
PFFNIO/RGETK /VOG
PF O/RGETK /HSAC
PF O/HSAC /RGETK
PF O/RG /RGETK
PF O/RG /HSAC
Here are the records should NOT be matched:
PFO/VOG
PFO/VOG /HSAC
PFO/HSAC /HSAC
PFXAPO/VOG
PFXAPO/VOG /HSAC
PFXAPO/HSAC /HSAC
PFFNIO/VOG
PFFNIO/VOG /HSAC
PFFNIO/HSAC /HSAC
PF O/ HSAC
PF XAP O/HSAC
PFFNI O/ HSAC
CodePudding user response:
You can use
^PF\s*(?:(?:XAP|FNI)\s*)?O\/(?!\s*(?:VOG\ ?(?:\/HSAC)?|HSAC\ ?\/HSAC)$)\s*(?:RG|VO|HS)[A-Z]*\ ?(?:\/[A-Z] )?$
See the regex demo.
Details:
^
- start of stringPF
-PF
\s*
- zero or more whitespaces(?:(?:XAP|FNI)\s*)?
- an optional sequence ofXAP
orFNI
and then zero or more whitespacesO\/
-O/
(?!\s*(?:VOG\ ?(?:\/HSAC)?|HSAC\ ?\/HSAC)$)
\s*
- zero or more whitespaces(?:RG|VO|HS)
-RG
,VO
orHS
[A-Z]*
- zero or more uppercase ASCII letters\ ?
- an optional(?:\/[A-Z] )?
- an optional sequence of/
and one or more ASCII uppercase letters$
- end of string.