অধিকাংশ লেটার এবং ক্যারেক্টার নিজেদের সাথে ম্যাচ করে। তবে কিছু ক্যারেক্টার আছে যাকে মেটাক্যারেক্টার বলে, সেগুলো নিজেদের সাথে ম্যাচ করে না। বরং সেগুলো নির্দেশ করে যে কোনো প্যাটার্ন ম্যাচ করা উচিত, অথবা রেগুলার এক্সপ্রেশনের অংশগুলো রিপিট বা পরিবর্তন করে।
মেটাক্যারেক্টারদের সম্পূর্ণ তালিকা:
. ^ $ * + ? { } [ ] \ | ( )
প্রথমে [ এবং ] দেখব। এগুলো ক্যারেক্টার ক্লাস ইন্ডিকেট করার জন্য ব্যবহৃত হয়, যা হলো ক্যারেক্টার সেট যা আপনি ম্যাচ করতে চান। ক্যারেক্টারগুলো আলাদা আলাদা লিস্ট করা যায়, অথবা একটি রেঞ্জ ইন্ডিকেট করা যায় দুটি ক্যারেক্টার দিয়ে এবং সেগুলোকে '-' দিয়ে আলাদা করে। উদাহরণস্বরূপ, [xyz] x, y, বা z যেকোনো ক্যারেক্টার ম্যাচ করবে; এটি [x-z]-এর সমান যা রেঞ্জ ব্যবহার করে একই সেট এক্সপ্রেস করে। আপনি যদি শুধু লোয়ারকেস লেটার ম্যাচ করতে চান, আপনার রেজেক্স হবে [a-z]।
মেটাক্যারেক্টার ক্লাসের ভেতর কাজ করে না। উদাহরণস্বরূপ, [abc$] 'a', 'b', 'c', বা '$' যেকোনো ক্যারেক্টার ম্যাচ করবে; '$' একটি মেটাক্যারেক্টার, কিন্তু ক্যারেক্টার ক্লাসের ভেতরে এটি এর স্পেশাল প্রকৃতি হারিয়ে যায়।
যদি ক্লাসের প্রথম ক্যারেক্টার হিসেবে '^' থাকে তবে এর মানে সেই ক্লাসের বাইরের সব ক্যারেক্টার; উদাহরণস্বরূপ, [^8] '8' ছাড়া যেকোনো ক্যারেক্টার ম্যাচ করবে।
শायद সবচাইতে গুরুত্বপূর্ণ মেটাক্যারেক্টার হলো ব্যাকস্ল্যাশ, \। এটি সব মেটাক্যারেক্টার এস্কেপ করার জন্যও ব্যবহৃত হয় যাতে আপনি প্যাটার্নে সেগুলো ম্যাচ করতে পারেন; উদাহরণস্বরূপ, আপনি যদি ] বা \ ম্যাচ করতে চান, তবে আপনি সেগুলোর আগে ব্যাকস্ল্যাশ দিয়ে তাদের স্পেশাল মেনিং দূর করতে পারেন: \] বা \\।