Hallo,

Als beginner in reguliere expressies heb ik een vraag:

Ik heb een string met daarin een getal. Dit getal wil ik ophogen in de string. Dus bijvoorbeeld:

[Lorem ipsum=88 dolor]

Bij het getal wil ik steeds 1500 optellen. Dus in dit geval moet de string veranderen naar:

[Lorem ipsum=1588 dolor]

Bij voorkeur doe ik dit via in query in de MySQL database. Anders met een PHPscriptje.

Heeft iemand een idee hoe ik dit het beste kan doen?

Dank en groeten, Bert.
het beste had je dat natuurlijk niet zo op moeten slaan.

In mysql wordt dat lastig. Mysql kent wel een regex benadering om een match te vinden, maar daar komt "ja" of "nee" uit. (1 of 0)

http://dev.mysql.com/doc/refman/5.7/en/regexp.html

daar heb je dus niet veel aan.

Je zult dat dus record voor record moeten doen in php. Daarbij is het wel handig om bij te houden dat je een record gedaan hebt, want als je deze actie 2x uitvoert, is het geen 1588 geworden, maar 3088.

Ook in het geval je de helft van je records gedaan hebt, en je na een vastloper de andere helft nog moet doen....

Vraag is ook:
wat is een getal voor jou?

88 is duidelijk, maar kan er ook 88.12 staan, of 88,56?
En -88 is natuurlijk ook een getal.
Net als dat 1.2E-02 een getal is (0.012)

Wat kan er allemaal voorkomen?
Niet perfect, maar je moet toch wat :

<?php

$string = 'Lorem ipsum=88 dolor';

echo '<p>Originele string : ' . $string .'</p>' . PHP_EOL;

$pattern = '/\d+/';

// Eerst getal zoeken.
// Krijgt een array met gevonden getallen retour

preg_match_all($pattern, $string, $matches);
$match = $matches[0][0];

// Vervang nu het getal met een nieuwe waarde getal+1500
$newvalue = $match + 1500;

$string = preg_replace($pattern, $newvalue, $string);
echo '<p>String met het nieuwe getal : ' . $string . '</p>' . PHP_EOL;

?>
Is er zekerheid dat dit de enige cijfers in de string zijn? of moet er een = voor staan? Is het getal een geheel getal? of kan het een breuk zijn, of een negatief getal?

MEt name de vraag of het de enige cijfers zijn, lijkt me van belang.

als er toch 88.25 in staat, zal bovenstaande code er 1588.1525 van maken natuurlijk
@Ivo, bij dit soort vraagstukken kun je beter de "naïeve aanpak" volgen, waarbij je er vanuit gaat dat het voorbeeld alle gevallen dekt. Indien dit niet het geval is (wat vaak de praktijk is) dan is het aan de TS om met een nauwkeurigere omschrijving te komen.
Gebruik dan dit :

$pattern = '/[-+]?\d+\.?\d+/';


Gevonden met zoeken op de interwebs.

Daarna wat oefenen.

Reageren