⊗ppPmRgNPB 252 of 447 menu

Non-capturing скоби в регулярните изрази на PHP

Скобите () изпълняват две функции - групиране на символи и функция на capturing група. А какво да правим, ако ни трябва да групираме, но да не capture-ваме в група? За решаване на този проблем са създадени специални non-capturing скоби (?: ) - те групират, но не capture-ват в група.

Пример

В следващия пример първите скоби са ни необходими за групиране, а вторите - за capturing група. Обаче, и едините, и другите скоби capture-ват данни в група:

<?php $str = 'abab123'; $reg = '#(ab)+([1-9]+)#'; preg_match_all($reg, $str, $res); ?>

В резултат в нашите capturing групи ще има следното:

<?php var_dump($res[0]); // ще изведе 'abab123' var_dump($res[1]); // ще изведе 'ab' var_dump($res[2]); // ще изведе '123' ?>

Пример

Нека направим така, че първата двойка скоби само да групира, но да не capture-ва в група:

<?php $str = 'abab123'; $reg = '#(?:ab)+([1-9]+)#'; preg_match_all($reg, $str, $res); ?>

В резултат в първата capturing група ще бъде нашето число:

<?php var_dump($res[1]); // ще изведе '123' ?>

Практически задачи

Дадени са поднизове, разделени на две части от произволен брой двойки $@:

<?php $str = 'aaa$@bbb aaa$@$@bbb aaa$@$@$@bbb'; ?>

Намерете всеки от такива поднизове и за всеки намерен подниз сложете в първата capturing група това, което стои преди разделителя, а във втората capturing група - това, което стои след разделителя.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне