Doe! Kind Regards,
Jochen Daum Chief Automation Officer Automatem Ltd Phone: 09 630 3425 Mobile: 021 567 853 Email: [email protected] Skype: jochendaum Website: www.automatem.co.nz http://twitter.com/automatem http://www.xing.com/go/invite/3425509.181107 On Thu, Jul 16, 2009 at 1:59 PM, Ken Golovin<[email protected]> wrote: > > Jochen, > > The reason why your regex did not match was because between the > > (<div >> style="float:left;">.*<div[^>]+class="icon">.*?</div>.*?</div>)+ > > blocks there is some space, so that's why only the first block would match, > and the rest of the HTML goes to the next pattern. By making the quantifier > ungreedy, you match all the blocks within the same pattern, so you could > even remove the + sign after the closing bracket as it is not needed. > > If you wanted to really be able to match this block by matching multiple > repeating blocks, you would have to use a regex like this: > > $regex = '#(<div[^>]+id="cpanel">.*?)'. > '((?:<div > style="float:left;">.*?<div[^>]+class="icon">.*?</div>.*?</div>\s+)+)'. // > note you need to account for the spaces and newlines (that's why \s+), plus > all the repetitions must be within the pattern itself > '(.*?</div>.*?</td>)#ism'; // > > which produces the same result :) > > Ken > > ----- Original Message ----- > From: "Jochen Daum" <[email protected]> > To: <[email protected]> > Sent: Thursday, July 16, 2009 1:16 PM > Subject: [phpug] Re: make specific regex part greedy > > > > On Thu, Jul 16, 2009 at 1:03 PM, Ken Golovin<[email protected]> wrote: >> >> This has worked for me: >> $regex = '#(<div[^>]+id="cpanel">.*?)'. >> '(<div >> style="float:left;">.*<div[^>]+class="icon">.*?</div>.*?</div>)+'. // note >> the question mark next to + quantifier is removed >> '(.*?</div>.*?</td>)#ism'; //instead the first .*? becomes >> greedy >> > > > Yes it does, thanks Ken! > > so the trick is to find which part has become greedy inside? > > Kind Regards, > > Jochen Daum > > Chief Automation Officer > Automatem Ltd > > Phone: 09 630 3425 > Mobile: 021 567 853 > Email: [email protected] > Skype: jochendaum > Website: www.automatem.co.nz > http://twitter.com/automatem > http://www.xing.com/go/invite/3425509.181107 > >> >> >> Ken >> ----- Original Message ----- >> From: "Jochen Daum" <[email protected]> >> To: <[email protected]> >> Sent: Thursday, July 16, 2009 12:53 PM >> Subject: [phpug] Re: make specific regex part greedy >> >> >> >> Hi Stig, >> >> On Thu, Jul 16, 2009 at 12:35 PM, Stig Manning<[email protected]> wrote: >>> >>> Hi Jochen, >>> >>> Can you provide some example text that contains matches? (and the >>> correct match) >>> >>> Might help us find a solution, >>> >> >> Please see below (its from the Joomla control panel) >> >> >> <div id="cpanel"> >> <div style="float:left;"> >> <div class="icon"> >> <a href="index.php?option=com_content&task=add"> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-article-add.png" >> alt="Add New Article" /> <span>Add New Article</span></a> >> </div> >> </div> >> <div style="float:left;"> >> >> <div class="icon"> >> <a >> href="index2.php?option=com_comprofiler&task=editPlugin&cid=501"> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-extension.png" >> alt="Global Configuration" /> >> <span>Subscriptions</span></a> >> </div> >> </div> >> <div style="float:left;"> >> <div class="icon"> >> >> <a href="test"> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-extension.png" >> alt="Global Configuration" /> >> <span>test</span></a> >> </div> >> </div> >> <div style="float:left;"> >> <div class="icon"> >> <a href="index.php?option=com_content"> >> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-article.png" >> alt="Article Manager" /> <span>Article Manager</span></a> >> </div> >> </div> >> <div style="float:left;"> >> <div class="icon"> >> <a href="index.php?option=com_frontpage"> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-frontpage.png" >> alt="Front Page Manager" /> <span>Front Page Manager</span></a> >> >> </div> >> </div> >> <div style="float:left;"> >> <div class="icon"> >> <a href="index.php?option=com_sections&scope=content"> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-section.png" >> alt="Section Manager" /> <span>Section Manager</span></a> >> </div> >> </div> >> >> <div style="float:left;"> >> <div class="icon"> >> <a href="index.php?option=com_categories&section=com_content"> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-category.png" >> alt="Category Manager" /> <span>Category Manager</span></a> >> </div> >> </div> >> <div style="float:left;"> >> <div class="icon"> >> >> <a href="index.php?option=com_media"> >> <img src="/administrator/templates/khepri/images/header/icon-48-media.png" >> alt="Media Manager" /> <span>Media Manager</span></a> >> </div> >> </div> >> <div style="float:left;"> >> <div class="icon"> >> <a href="index.php?option=com_menus"> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-menumgr.png" >> alt="Menu Manager" /> <span>Menu Manager</span></a> >> >> </div> >> </div> >> <div style="float:left;"> >> <div class="icon"> >> <a href="index.php?option=com_languages&client=0"> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-language.png" >> alt="Language Manager" /> <span>Language Manager</span></a> >> </div> >> </div> >> >> <div style="float:left;"> >> <div class="icon"> >> <a href="index.php?option=com_users"> >> <img src="/administrator/templates/khepri/images/header/icon-48-user.png" >> alt="User Manager" /> <span>User Manager</span></a> >> </div> >> </div> >> <div style="float:left;"> >> <div class="icon"> >> >> <a href="index.php?option=com_config"> >> <img >> src="/administrator/templates/khepri/images/header/icon-48-config.png" >> alt="Global Configuration" /> <span>Global >> Configuration</span></a> >> </div> >> </div> >> </div> >> >> </td> >> <td width="45%" valign="top"> >> >> >> Kind Regards, >> >> Jochen Daum >> >> Chief Automation Officer >> Automatem Ltd >> >> Phone: 09 630 3425 >> Mobile: 021 567 853 >> Email: [email protected] >> Skype: jochendaum >> Website: www.automatem.co.nz >> http://twitter.com/automatem >> http://www.xing.com/go/invite/3425509.181107 >> >> >>> Cheers, >>> Stig >>> >>> Jochen Daum wrote, on 16/07/2009 10:01 AM: >>>> The regex string is: >>>> >>>> $regex = '#(<div[^>]+id="cpanel">.*?)'. >>>> '(<div style="float:left;">.*?<div >>>> class="icon">.*?</div>.*?</div>)+'. //this needs to be greedy >>>> '(.*?</div>.*?</td>)#ism' //instead the first .*? becomes greedy >>>> >>>> >>>> >>>> The 2nd line html elements repeat and I don't know how often. I'd like >>>> to capture all of the repetition, currently it only captures the first >>>> element. >>>> >>>> Any pointer of how to make the ()+ greedy? >>>> >>>> >>> >>> > >>> >> >> >> >> >> >> > >> > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ NZ PHP Users Group: http://groups.google.com/group/nzphpug To post, send email to [email protected] To unsubscribe, send email to [email protected] -~----------~----~----~----~------~----~------~--~---
