I have the following values for a custom picklist field

  1. Lower - L1
  2. Upper - L2
  3. Side - L3

What is the regex pattern to match the above values?

Mainly this pattern

   {anylength of string}{one space}{one hyphen}{one space}{L charecter}{one digit integer}

I have tried something this way but not working

String message = 'Upper - L2';
String regex = '[a-zA-Z\\sL\\s\\d{1}]*';
Pattern regexPattern = Pattern.compile(regex);
Matcher regexMatcher = regexPattern.matcher(message);
if(regexMatcher.matches() == true) {

You have tried to make the regex using a character class, but that's simply incorrect.

You should find something like the following is more appropriate:

^.+ - L[0-9]$

This is:

  • Matching the whole value (start at the beginning with "^" and end at the end with "$")
  • Allowing any sequence of at least one character with ".+"
  • explicitly matching space, hyphen, space (this doesn't match tabs etc.)
  • explicitly matching "L" (this doesn't match "l")
  • allowing a single numeric digit between 0 and 9
| improve this answer | |
  • The ^ and $ are not strictly necessary for matches, as that method sets the match boundary to the entire string (but not harmful in this case, either). – sfdcfox May 27 at 8:00

A single character class isn't going to help you here, as that will simply match anything, and you specified "*", meaning zero or more, so it'll even match an empty string!

You need the specific pattern to match, so:

String regex = '[a-zA-Z]+ - [a-zA-Z][0-9]';

Which covers all of your examples. The spaces and hyphen can be written normally, the first part specifies only letters (at least 1 because of "+"), and exactly one letter and number at the end.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.