Re: Regular expression question
| From: | Robin Vickery | Date: | Fri, 12 Aug 2005 08:39:24 +0000 |
| Subject: | Re: Regular expression question | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-220509@lists.php.net to get a copy of this message | ||
On 8/11/05, Leon Vismer <lvismer@tasmer.co.za> wrote:
> Hi Robin
>
> Many thanks for this,
>
> how would one extend this to support the following:
> $str = "insert into userComment (userID, userName, userSurname) values (0,
> 'Leon', 'mcDonald')";
>
> one does not want
>
> $str = "insert into user_comment (user_id, user_name, user_surname) values (0,
> 'Leon', 'mc_donald')";
$match = '/(?<=[a-z])(?<![Mm]c|[Mm]ac)([A-Z]+)/e';
Should make exceptions for "McDonald", "mcDonald", "MacDonald" and
"macDonald".
With luck you don't have any tables called something like "appleMacUsers".
> unfortunately lookbehind assertions does not support non-fixed length chars so
> /(?<=(?<!')[a-z])([A-Z]+)/e will work for 'mDonald' but the following will
> not
> work.
True, lookbehind assertions must be a fixed length - but unlike in
perl, they can have alternates which are different fixed lengths:
This is illegal, because the length isn't fixed: (?<![Mm]a?c)
This is fine, because each alternate is fixed even though they are
diffferent lengths: (?<![Mm]c|[Mm]ac)
-robin