Gebruik van een variabele uit het replacement halen bij een preg_replace
Een beetje lastig te omschrijven maar ik maak bij joomla gebruik van een plugin en die wil ik iets aanpassen.
Dit is een stukje code wat goed functioneert:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$regex = "#((\d*) (.{3}).)( (\d{1,2}):(\d{1,2}):)(.*)(\s\-\s)(.*)#";
$replacement = '<td>$5:$6</td><td>$7</td><td>$8</td><td>$9</td>';
$insert_str = '<a href="'.$item->link.'" target="_blank"> <i class="icon-cogs icon-info" style="color: white"></i> </a>';
$content_buffer .= $this->_str_insert(preg_replace($regex, $replacement, $item->title), $rssfilter, $insert_str);
?>
$regex = "#((\d*) (.{3}).)( (\d{1,2}):(\d{1,2}):)(.*)(\s\-\s)(.*)#";
$replacement = '<td>$5:$6</td><td>$7</td><td>$8</td><td>$9</td>';
$insert_str = '<a href="'.$item->link.'" target="_blank"> <i class="icon-cogs icon-info" style="color: white"></i> </a>';
$content_buffer .= $this->_str_insert(preg_replace($regex, $replacement, $item->title), $rssfilter, $insert_str);
?>
In de $replacement zijn variabelen gedefineerd en wat ik nu wil: wat staat er nu 'precies' in $8 en $9?
Dus voor test bv:
Is dit mogelijk of moet je het dan met een array gaan doen?
Gewijzigd op 11/12/2016 13:47:43 door Nkamp Kamp van de
Cijfers met een dollarteken ervoor kan je volgens mij alleen gebruiken in de preg_replace-functie. Verder kan je volgens mij geen PHP variabelen hebben die alleen uit cijfer(s) bestaan.
als simpler voorbeeld:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$email = '[email protected]';
$b = preg_replace('#^(.*)@(.*)$#', 'voor: $1 na @: $2', $email);
echo $b;
?>
$email = '[email protected]';
$b = preg_replace('#^(.*)@(.*)$#', 'voor: $1 na @: $2', $email);
echo $b;
?>
de eerste match heb je op het stuk voor het @. In dit geval dus "info"
de 2e match het hele stuk na de @, dus "phphulp.nl"
En zo nummert dat verder.
Wordt wel wat onduidelijk bij herhalingen in de regex, of bij regexen die ook nog non-matching stukken gebruikt of sowieso haakjes in de zoektekst heeft staan.
Bij de laatste reactie is het gedaan via het @ teken. Ipv. het @ teken heb ik het - teken gebruikt want het gaat tussen twee teams. Nu krijg ik met wat er voor het - staat ook nog andere gegevens.
Nu moet ik de reguliere expressie zo aanpassen dat de zoek opdtracht pas start vanaf <td>, want om dit stukje string gaat het nog
<td>WSV DS 1</td><td>- tegenstander DS 1</td>
of
<td>tegenstander DS 1</td><td>- WSV DS 1</td>
Voor een ander is het namelijk best lastig om een regex te lezen en te begrijpen als er niet voorbeelden van de invoer bij staan.