note 111936 added to regexp.reference.recursive

From: Date: Mon, 15 Apr 2013 12:09:16 +0000
Subject: note 111936 added to regexp.reference.recursive
Groups: php.notes 
Request: Send a blank email to php-notes+get-194477@lists.php.net to get a copy of this message
Below are some reusable patterns. I used comments with the 'x' modifier for human-readability. You can write also a function, that generates patterns for specified bracket/quote pairs. <?php /* normal paretheses */ $simple_pattern = "( (?#root pattern) ( (?#text or expression) (?>[^\\(\\)]+) (?#text) | \\((?-2)\\) (?#expression and recursion) )* )"; $simple_okay_text = "5( 2a + (b - c) ) - a * ( 2b - (c * 3(b - (c + a) ) ) )"; $simple_bad_text = "5( 2)a + (b - c) ) - )a * ( ((2b - (c * 3(b - (c + a) ) ) )"; echo "Simple pattern results:\n"; var_dump(preg_match("/^$simple_pattern\$/x",$simple_okay_text)); var_dump(preg_match("/^$simple_pattern\$/x",$simple_bad_text)); echo "\n----------\n"; /* some brackets */ $full_pattern = "( (?#root pattern) ( (?#text or expression) (?>[^\\(\\)\\{\\}\\[\\]<>]+) (?#text not contains brackets) | ( [\\(\\{\\[<] (?#start bracket) (?(?<=\\()(?-3)\\)| (?#if normal) (?(?<=\\{)(?-3)\\}| (?#if coursed) (?(?<=\\[)(?-3)\\]| (?#if squared) (?1)\\> (?#else so if tag) ))) (?#close nested-but-logically-the-some-level subpatterns) ) )* )"; $full_okay_text = "5( 2a + [b - c] ) - a * ( 2b - {c * 3<b - (c + a) > } )"; $full_bad_text = "5[ 2a + [b - c} ) - a * ( 2b - [c * 3(b - c + a) ) ) }"; echo "Full pattern results:\n"; var_dump(preg_match("/^$full_pattern\$/x",$simple_okay_text)); var_dump(preg_match("/^$full_pattern\$/x",$full_okay_text)); var_dump(preg_match("/^$full_pattern\$/x",$full_bad_text)); echo "\n----------\n"; /* some brackets and quotes */ $extrafull_pattern = "( (?#root pattern) ( (?#text or expression) (?>[^\\(\\)\\{\\}\\[\\]<>'\"]+) (?#text not contains brackets and quotes) | ( ([\\(\\{\\[<'\"]) (?#start bracket) (?(?<=\\()(?-4)\\)| (?#if normal) (?(?<=\\{)(?-4)\\}| (?#if coursed) (?(?<=\\[)(?-4)\\]| (?#if squared) (?(?<=\\<)(?-4)\\>| (?#if tag) ['\"] (?#else so if static) )))) (?#close nested-but-logically-the-some-level subpatterns) ) )* )"; $extrafull_okay_text = "5( 2a + ['b' - c] ) - a * ( 2b - \"{c * 3<b - (c + a) > }\" )"; $extrafull_bad_text = "5( 2a + ['b' - c] ) - a * ( 2b - \"{c * 3<b - (c + a) > }\" )"; echo "Extra-full pattern results:\n"; var_dump(preg_match("/^$extrafull_pattern\$/x",$simple_okay_text)); var_dump(preg_match("/^$extrafull_pattern\$/x",$full_okay_text)); var_dump(preg_match("/^$extrafull_pattern\$/x",$extrafull_okay_text)); var_dump(preg_match("/^$extrafull_pattern\$/x",$extrafull_bad_text)); /* Outputs: Simple pattern results: int(0) int(0) ---------- Full pattern results: int(0) int(0) int(0) ---------- Extra-full pattern results: int(0) int(0) int(0) int(0) */ ?> ---- Server IP: 69.147.83.199 Probable Submitter: 86.101.233.13 ---- Manual Page -- http://php.net/manual/en/regexp.reference.recursive.php Edit -- https://master.php.net/note/edit/111936 Del: integrated -- https://master.php.net/note/delete/111936/integrated Del: useless -- https://master.php.net/note/delete/111936/useless Del: bad code -- https://master.php.net/note/delete/111936/bad+code Del: spam -- https://master.php.net/note/delete/111936/spam Del: non-english -- https://master.php.net/note/delete/111936/non-english Del: in docs -- https://master.php.net/note/delete/111936/in+docs Del: other reasons-- https://master.php.net/note/delete/111936 Reject -- https://master.php.net/note/reject/111936 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#194477) next »