OK, problem solved. Using preg_last_error shows that the backtrack limit gets exhausted, it can be fixed by increasing the pcre.backtrack_limit in php.ini. Probably a better fix would be to improve the regex - I'll look into using the one you suggested. Thanks again for your help, Ewen 2008/9/12 Jochem Maas <jochem@xxxxxxxxxxxxx> > Ewen Cumming schreef: > >> Actually bummer - testing on wrong version. >> >> The U modifier is causing problems too - only matching the first character >> instead of the whole string. >> > > hmm, missed that, that might require adding ?U to relevant sub-assertion > ... > > I'm wondering if your regexp is not 'wrong' (big word in this case), > try this variation: > > $pattern = '#<\\!T_([^> ]+)([^>]*)>(?:(.*)?<\\!T_end\\1>)?#si'; > > gives me the same output as your expected results, albeit that there > are less 'root' keys in the matches array ... so you may need to > change some code with regard to fishing out values from $matches > > > >> >> >> 2008/9/12 Ewen Cumming <ewen.cumming@xxxxxxxxx> >> >> Hi Jochem, >>> >>> Replacing the 's' modifier with 'm' fixed it this instance but broke >>> other >>> parts on the site (the same result as removing 's'). >>> >>> But the other regex ( $pattern = "/<!T_([^> >>> ]+)([^>]*)>(.*?)<!T_end\\1>|<!T_([^> >>> ]+)([^>]*)>/Ui";) is working perfectly. >>> >>> I will continue to test and see if it throws up any other problems. Many >>> thanks for such a quick and great response. >>> >>> I will file a bug report however I may need to submit the full test >>> string >>> as cutting it down any further seems to 'fix' the discrepency. >>> >>> Thanks again, >>> Ewen >>> >>> >>> >>> 2008/9/12 Jochem Maas <jochem@xxxxxxxxxxxxx> >>> >>> Jochem Maas schreef: >>> >>>> Ewen Cumming schreef: >>>>> >>>>> Hi everybody, >>>>>> >>>>>> >>>>>> ... >>>>> >>>> >>>> BUT I may have work around for you, try this regexp (replaces s modifer >>>>> with m modifier): >>>>> >>>>> $pattern = "/<!T_([^> ]+)([^>]*)>(.*?)<!T_end\\1>|<!T_([^> >>>>> ]+)([^>]*)>/mi"; >>>>> >>>>> >>>>> the following pattern also seems to do what you want: >>>> >>>> $pattern = "/<!T_([^> ]+)([^>]*)>(.*?)<!T_end\\1>|<!T_([^> >>>> ]+)([^>]*)>/Ui"; >>>> >>>> >>>> Im interested to know if either of these two solve your immediate issue. >>>> >>>> >>> >> >