I have this Regex pattern:
\b(?:[A-Z\d] [\/\-]) [A-Z\d] \b
And it collects everything I need perfectly, but then also grabs some things I don't want. I'm wondering how to write in there something like I do want to accept "-", but no more than 5 at a time. Same with "/" but maybe no more than 1 for those. Here's an example of what it's grabbing that I do want vs what it's grabbing that I don't want:
Yes:
AIR-CT2504-50-K9
1000BASE-T
ISR4451-X-SEC/K9
No:
0/1/10/5/50
2B108-250A-2B-2B-2B-250A-2B-2B-2B-250A-2B-2B
2022/10/28
CodePudding user response:
If you don't want partial matches, you might use anchors and exclude a certain number of hyphens or forward slashes.
As the strings do not seems to contain spaces, and you can mix - and /:
^(?!(?:[^\s-]*-){5})(?!(?:[^\s\/]*\/){2})(?:[A-Z\d] [\/-]) [A-Z\d] $
The pattern matches:
^Start of string(?!(?:[^\s-]*-){5})Assert not 5 hyphens where[^\s-]matches a non whitespace char except for-(?!(?:[^\s\/]*\/){2})Assert not 2 forward slashes(?:[A-Z\d] [\/-])Repeat 1 times matching 1 chars A-Z or digits followed by either/or-[A-Z\d]match 1 chars A-Z or a digit$End of string
