Re: Anyone have a tool/script to convert <? to <?php (but not <?=)

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

 



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@xxxxxxxxxx> 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@xxxxxxxxx]
> > Sent: Friday, February 14, 2014 11:31 AM
> > To: Daevid Vincent
> > Cc: php-general@xxxxxxxxxxxxx
> > Subject: Re:  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@xxxxxxxxx]
> > >> Sent: Friday, February 14, 2014 10:54 AM
> > >> To: Daevid Vincent
> > >> Cc: php-general@xxxxxxxxxxxxx
> > >> Subject: Re:  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@xxxxxxxxxx>
> > >> 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@xxxxxxxxxx]
> > >>>> Sent: Wednesday, February 12, 2014 2:57 PM
> > >>>> To: php-general@xxxxxxxxxxxxx
> > >>>> Subject: RE:  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

[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