Re: Regular Expression differences between 4.4 and 5.2
| From: | Ewen Cumming | Date: | Mon, 15 Sep 2008 08:43:58 +0000 |
| Subject: | Re: Regular Expression differences between 4.4 and 5.2 | ||
| References: | 1 2 3 4 5 6 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-280158@lists.php.net to get a copy of this message | ||
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@iamjochem.com>
> 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@gmail.com>
>>
>> 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@iamjochem.com>
>>>
>>> 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.
>>>>
>>>>
>>>
>>
>