Re: Regular Expression differences between 4.4 and 5.2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.
>>>>
>>>>
>>>
>>
>

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux