Re: Anyone have a tool/script to convert <? to <?php (but not <?=)
| From: | Nickolas Whiting | Date: | Fri, 14 Feb 2014 19:57:01 +0000 |
| Subject: | Re: Anyone have a tool/script to convert <? to <?php (but not <?=) | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-322875@lists.php.net to get a copy of this message | ||
Any luck with the regex I supplied?
(<\?)(?!php|=|>|(?:\s+(?=\=)))
/(<\?)(?!php|=|>|(?:\s+(?=\=)))/
-
1st Capturing group (<\?)
- < matches the character < literally
- \? matches the character ? literally
-
(?!php|=|>|(?:\s+(?=\=))) Negative Lookahead - Assert that it is
impossible to match the regex below
-
1st Alternative: php
- php matches the characters php literally (case sensitive)
-
2nd Alternative: =
- = matches the character = literally
-
3rd Alternative: >
- > matches the character > literally
-
4th Alternative: (?:\s+(?=\=))
-
(?:\s+(?=\=)) Non-capturing group
-
\s+ match any white space character [\r\n\t\f ]
- Quantifier: Between one and unlimited times, as many times as
possible, giving back as needed [greedy]
-
(?=\=) Positive Lookahead - Assert that the regex below can be
matched
- \= matches the character = literally
On Fri, Feb 14, 2014 at 2:41 PM, Daevid Vincent <daevid@daevid.com> wrote:
> Now we're getting somewhere maybe? ;-)
>
> On my text examples it seems to look good but I think it's not much
> different than using a \s
>
> <?
> if ($foo)
> ?>
> <?= $foo ?> <?=$foo;?>
> <? if($foo) ?>
> <?php $foo='bar'; ?>
> <?= $foo ?>
> <?=$foo?>
> <?echo 'i told you so';?>
> <?phpecho 'this one fails';?>
>
> If I substitute '<?php' then I end up with this:
>
> <?php
> if ($foo)
> ?>
> <?= $foo ?> <?=$foo;?>
> <?php if($foo) ?>
> <?php $foo='bar'; ?>
> <?= $foo ?>
> <?=$foo?>
> <?phpecho 'i told you so';?> <-- this one breaks now though
> <?phpecho 'this one fails';?> <-- don't care as it was broken to begin
> with
>
> Is there a way to tweak the substitution with that same lookahead idea so
> if
> it was <? Followed by a character NOT a = then it adds a space?
>
>
> > -----Original Message-----
> > From: Joshua Kehn [mailto:josh.kehn@gmail.com]
> > Sent: Friday, February 14, 2014 11:31 AM
> > To: Daevid Vincent
> > Cc: php-general@lists.php.net
> > Subject: Re: [PHP] Anyone have a tool/script to convert <? to <?php (but
> not
> > <?=)
> >
> > Use a lookahead:
> >
> > <\?(?!(=|php))
> >
> > http://l.kehn.io/image/1H2J0p0T472k
> >
> > --jk
> >
> > On 14 Feb 2014, at 11:21, Daevid Vincent wrote:
> >
> > > Try it...
> > >
> > > <?php $foo='bar'; ?>
> > > <?= $foo ?>
> > > <?=$foo?>
> > > <?echo 'i told you so';?>
> > > <?phpecho 'this one fails';?>
> > >
> > > The ONLY one that gives a parser error is the LAST one where yes, a
> > > space is required after a <?php
> > >
> > > That is NOT the case for <? or <?=
> > >
> > >> -----Original Message-----
> > >> From: Aziz Saleh [mailto:azizsaleh@gmail.com]
> > >> Sent: Friday, February 14, 2014 10:54 AM
> > >> To: Daevid Vincent
> > >> Cc: php-general@lists.php.net
> > >> Subject: Re: [PHP] Anyone have a tool/script to convert <? to <?php
> > >> (but not
> > >> <?=)
> > >>
> > >> What I posted (and all the others) would work, replacing all
> > >> instances of
> > >> "<? " (notice the space) with "<?php " should work, it
> > >> will leave all
> > >> existing <?= and <?php alone (since having a space after ? and
> > >> before
> > >> =/php would produce a parser error.
> > >>
> > >> Not sure why you are saying that spaces are irrelevant thou.
> > >>
> > >>
> > >> On Fri, Feb 14, 2014 at 1:34 PM, Daevid Vincent <daevid@daevid.com>
> > >> wrote:
> > >>
> > >>> *sigh*
> > >>>
> > >>> <?=$foo?> is perfectly valid so is <?=$foo;?> or any combination
> > >>> WITH
> > >>> SPACES OR NOT.
> > >>> If this were trivial, I wouldn't have asked the list. I've been
> > >>> coding PHP
> > >>> since 1996. ;-)
> > >>>
> > >>> So if you have <? you have to make sure it doesn't have a
> > >>> '=' after
> > >>> the
> > >>> '?' to convert to '<?php'
> > >>>
> > >>> Spaces are irrelevant and can NOT be relied upon as a unique
> > >>> feature.
> > >>>
> > >>>> -----Original Message-----
> > >>>> From: Daevid Vincent [mailto:daevid@daevid.com]
> > >>>> Sent: Wednesday, February 12, 2014 2:57 PM
> > >>>> To: php-general@lists.php.net
> > >>>> Subject: RE: [PHP] Anyone have a tool/script to convert <? to <?php
> > >>>> (but
> > >>> not
> > >>>> <?=)
> > >>>>
> > >>>> Thanks guys for the replies so far, however, if it were a simple
> > >>>> search
> > >>> and
> > >>>> replace I wouldn't have to ask ;-)
> > >>>>
> > >>>> The trick is that "<?=" is valid and legal and I want to
> > >>>> keep
> > >>>> those. I
> > >>> only
> > >>>> want to change if they are specifically "<?"
> > >>>>
> > >>>> Maybe there is some regex guru out there that knows the magic
> > >>> incantation.
> > >>>>
> > >>>> Related, for extra credit it drives me bonkers to see this:
> > >>>>
> > >>>> Hello <?= $username; ?>
> > >>>>
> > >>>> Note the end semicolon on the variable. I'd want to strip all those
> > >>>> off
> > >>> too,
> > >>>> but that is also not a trivial task if you think about it as it can
> > >>>> only
> > >>> be
> > >>>> removed if proceeded with <?=
> > >>>>
> > >>>>
> > >>>>
> > >>>> --
> > >>>> PHP General Mailing List (http://www.php.net/)
> > >>>> To unsubscribe, visit:
> > >>>> http://www.php.net/unsub.php
> > >>>
> > >>>
> > >>> --
> > >>> PHP General Mailing List (http://www.php.net/)
> > >>> To unsubscribe, visit:
> > >>> http://www.php.net/unsub.php
> > >>>
> > >>>
> > >
> > >
> > > --
> > > PHP General Mailing List (http://www.php.net/)
> > > To unsubscribe, visit: http://www.php.net/unsub.php
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
--
Nickolas Whiting
Consultant