I want to check if arguments passed in stdin to see if they conform to a valid java package name. The regex I have is not working properly. With the following code passing in com.example.package I receive the error message. I’m not sure what is wrong with my regex?
regex="/^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$/i" 17 if ! [[ $1 =~ $regex ]]; then 18 >&2 echo "ERROR: invalid package name arg 1: $1" 19 exit 2 20 fi
You are pretty close to the correct solution. Just tweak the regex a bit (also consider @fede’s simpler regex) and set the
nocasematch option for case insensitive matching. For example:
regex='^[a-z][a-z0-9_]*(\.[a-z0-9_]+)+[0-9a-z_]$' shopt -s nocasematch if ! [[ $1 =~ $regex ]]; then exit 2 fi shopt -u nocasematch
You are probably being misled by other languages that use
qr/regex/i (perl) for defining a case-insensitive regex object.
grep -qi is another, more portable, solution. Cheers.
Answered By – gvalkov
Answer Checked By – Cary Denson (BugsFixing Admin)