⊗ppPmRgEP 254 of 447 menu

Závorky v regulárních výrazech v PHP

Obsah zachycených skupin (závorek) je dostupný nejen v řetězci pro nahrazení, ale i v samotném regulárním výrazu: my můžeme něco uložit do skupiny a potom přímo v regulárním výrazu říct, že zde musí stát obsah této skupiny.

Obsah zachycených skupin je dostupný podle jejich čísel, před kterými stojí zpětné lomítko. Například, nultá skupina bude dostupná takto: \0, první skupina takto - \1, druhá - \2 a tak dále.

Jsem si jistý, že vše výše napsané je pro vás zatím velmi nejasné. To není překvapivé, protože zachycené skupiny jsou nejhůře pochopitelným místem regulárních výrazů. Pojďme si to vysvětlit na příkladech.

Příklad

Předpokládejme, že máme takovýto řetězec:

<?php $str = 'aa bb cd ef'; ?>

Pojďme v něm najít všechna místa, ve kterých jsou dvě stejné písmena za sebou. K řešení úlohy budeme hledat libovolné písmeno, uložit jej do skupiny a poté zkontrolovat, zda následujícím symbolem je obsah této skupiny:

<?php $res = preg_replace('#([a-z])\1#', '!', $str); ?>

Výsledek v proměnné bude následující:

'! ! cd ef'

Příklad

Předpokládejme, že máme takovýto řetězec:

<?php $str = 'asxca buzxb csgd'; ?>

Pojďme v něm najít všechna slova, ve kterých je první a poslední písmeno stejné. K řešení úlohy napíšeme následující vzor: písmeno, poté jedno nebo více písmen a poté stejné písmeno jako první:

<?php $res = preg_replace('#([a-z])[a-z]+\1#', '!', $str); ?>

Výsledek v proměnné bude následující:

'! ! csgd'

Příklad

Místo \1 lze psát \g1:

<?php $res = preg_replace('#([a-z])[a-z]+\g1#', '!', $str); ?>

Příklad

Lze také psát \g{1}:

<?php $res = preg_replace('#([a-z])[a-z]+\g{1}#', '!', $str); ?>

Příklad

Ve složených závorkách lze uvádět záporná čísla. V tomto případě se skupiny budou počítat od konce:

<?php $res = preg_replace('#([a-z])([a-z])\g{-2}#', '!', $str); ?>

Praktické úlohy

Je dán řetězec:

<?php $str = 'aaa bbb ccc xyz'; ?>

Najděte všechny podřetězce, ve kterých jsou tři stejná písmena za sebou.

Je dán řetězec:

<?php $str = 'a aa aaa abab bbbb'; ?>

Najděte všechny podřetězce, ve kterých jsou dvě a více stejných písmen za sebou.

Je dán řetězec:

<?php $str = 'aaa aaa bbb bbb ccc ddd'; ?>

Najděte všechny podřetězce, ve kterých jsou dvě stejná slova za sebou.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικά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
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout