RE: Replace in a string with regex

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

 



Hi, 
It doens't work.
I get 0_main.jpg if I do that..
I don't undestand the point of $1 $2 and $3..
In preg_replace('#(screens/)temp/(.+?)_1(_main\.jpg)#', what will be $1 and $2 and $3 ?
$ " I already knwo it's the (.+?) but the others didnt' get it.

Thank you...

-----Mensagem original-----
De: Eddie Drapkin [mailto:oorza2k5@xxxxxxxxx] 
Enviada: quarta-feira, 22 de Julho de 2009 16:03
Para: ash@xxxxxxxxxxxxxxxxxxxx
Cc: Jim Lucas; rszeus; php-general@xxxxxxxxxxxxx
Assunto: Re:  Replace in a string with regex

On Wed, Jul 22, 2009 at 11:01 AM, Ashley
Sheridan<ash@xxxxxxxxxxxxxxxxxxxx> wrote:
> On Wed, 2009-07-22 at 07:54 -0700, Jim Lucas wrote:
>> rszeus wrote:
>> > Thank you.
>> >
>> > What about instead test i want to insert a variable ?
>> > Like
>> > $id = "30";
>> > $file = "screens/temp/7a45gfdi6icpan1jtb1j99o925_1_main.jpg";
>> > echo preg_replace('#(screens/)temp/(.+?)_1(_main\.jpg)#', '$1$id$3', $file);
>>
>> Sure that can be done.  But you will need to change the second argument
>> to have double quotes so it will be parsed by PHP.
>>
>> Then I would surround YOUR variable with curly brackets to separate it
>> from the rest.
>>
>> echo preg_replace('#(screens/)temp/.+?_1(_main\.jpg)#',
>>                   "$1{$id}$3",
>>                   $file);
>>
>> > I am confusing " and '.
>> >
>> > Thank you
>> >
>> >
>> > -----Mensagem original-----
>> > De: Eddie Drapkin [mailto:oorza2k5@xxxxxxxxx]
>> > Enviada: quarta-feira, 22 de Julho de 2009 14:12
>> > Para: rszeus
>> > Cc: php-general@xxxxxxxxxxxxx
>> > Assunto: Re:  Replace in a string with regex
>> >
>> > On Wed, Jul 22, 2009 at 9:07 AM, rszeus<rszeus@xxxxxxxxx> wrote:
>> >> Hi. It Works to remove the _1 but it doesn't replace '7a45gfdi6icpan1jtb1j99o925' for 'test'
>> >>
>> >> Thank you
>> >>
>> >> -----Mensagem original-----
>> >> De: Eddie Drapkin [mailto:oorza2k5@xxxxxxxxx]
>> >> Enviada: quarta-feira, 22 de Julho de 2009 13:11
>> >> Para: rszeus
>> >> Cc: php-general@xxxxxxxxxxxxx
>> >> Assunto: Re:  Replace in a string with regex
>> >>
>> >> On Wed, Jul 22, 2009 at 8:02 AM, rszeus<rszeus@xxxxxxxxx> wrote:
>> >>> Hello,
>> >>>
>> >>> I’m tryng to make some replacements on a string.
>> >>>
>> >>> Everything goês fine until the regular expression.
>> >>>
>> >>>
>> >>>
>> >>> $file = "screens/temp/7a45gfdi6icpan1jtb1j99o925_1_main.jpg";
>> >>>
>> >>> echo $a =  str_replace(array(7a45gfdi6icpan1jtb1j99o925,
>> >>> 'temp/',’_([0-9])’), array(“test”,"",””), $file)
>> >>>
>> >>>
>> >>>
>> >>> The idea is to remove /temp and the last _1 from the file name..but i’m only
>> >>> getting this:
>> >>>
>> >>> screens/test_1_main.jpg
>> >>>
>> >>>
>> >>>
>> >>> I want it to be: screens/test_main.jpg
>> >>>
>> >>>
>> >>>
>> >>> Thank you
>> >>>
>> >>>
>> >>>
>> >>>
>> >> If you're trying to do a regular expression based search and replace,
>> >> you probably ought to use preg_replace instead of str_replace, as
>> >> str_replace doesn't parse regular expressions.
>> >>
>> >> Try this one out, I think I got what you wanted to do:
>> >>
>> >> <?php
>> >>
>> >> $file = "screens/temp/7a45gfdi6icpan1jtb1j99o925_1_main.jpg";
>> >>
>> >> echo preg_replace('#(screens/)temp/(.+?)_1(_main\.jpg)#', '$1$2$3', $file);
>> >>
>> >>
>> >
>> > In the second parameter, $2 is the string you'd want to replace to
>> > test so change '$1$2$3' to '$1test$3'.
>> >
>> > It seems like you're having trouble with regular expressions, may I
>> > suggest you read up on them?
>> >
>> > http://www.regular-expressions.info/ is a pretty great free resource,
>> > as ridiculous as the design is.
>> >
>> >
>>
>>
>>
> I tested this, with the double quotes and the curly braces around the
> middle argument (to avoid PHP getting confused) and it didn't recognise
> the matches by the numbered $1, $3, etc. I know I'm not the op who asked
> the original question, but it might help him/her?
>
> Thanks
> Ash
> www.ashleysheridan.co.uk
>
>

To avoid confusion, rather than something like
"$1{$id}$3"
Which looks really indecipherable, I'd definitely think something like
'$1' . $id . '$3'
is a lot easier to read and understand what's going on by immediately
looking at it.

As an added bonus, it'll definitely work ;)


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[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