Regex: Parentheses without capture

Use regular expressions without capturing a group by using non-capturing groups.

// Page requested is http://www.example.com/en_FR/
$uri = $_SERVER['REQUEST_URI']; // '/en_FR/'

// This regex returns matching groups for parentheses
preg_match('/\/((en|fr|de|it|nl|no|ja)_[A-Z]{2}|jp)\//', $uri, $matches);
$matches = array(
    0 => '/en_FR/',
    1 => 'en_FR',
    2 => 'en'
);

// This regex will include only matching groups using non-capturing groups
// indicated by "?:" inside "()"
preg_match('/\/((?:en|fr|de|it|nl|no|ja)_[A-Z]{2}|jp)\//', $uri, $matches);
$matches = array(
    0 => '/en_FR/',
    1 => 'en_FR'
);
// Named groups also supported
preg_match('/\/(?P<locale>(?:en|fr|de|it|nl|no|ja)_[A-Z]{2}|jp)\//', $uri,
    $matches);
$matches = array(
    0 => '/en_FR/',
    'locale' => 'en_FR',
    1 => 'en_FR'
);

Comments

Leave a Reply