1
votes

Suppression du texte de l'itération Foreach

Actuellement, j'ai le code suivant.

Can't Use My Phone (Suite) 3:34
Hi 0:35
Cel U Lar Device 6:28
Phone Down 3:29
U Use To Call Me 1:13
Mr. Telephone Man 3:12

Qui renvoie quelque chose qui ressemble à ceci.

foreach($html->find('ol.tracklist li.track') as $element) {
   print $element->plaintext;
   print '<br>';
}

Je me demande comment je peut supprimer les nombres à chacun de ces résultats. Je suppose que je dois utiliser regex pour y parvenir, mais après avoir un peu dérangé les regex, je n'ai pas pu trouver un moyen d'y parvenir sans affecter les titres qui contiennent également des choses comme. : ou d'autres symboles.

php

0 commentaires

6 Réponses :


-2
votes

Probablement pas la meilleure solution, mais vous pouvez simplement couper les 4 à 5 derniers caractères de la chaîne

substr( $string, 0, -5 );


1 commentaires

Ce serait une idée horrible, car parfois les nombres n'apparaissent pas du tout dans l'itération. Par conséquent, j'ai besoin d'utiliser Regex comme mentionné.



4
votes

essayez celui-ci cela peut vous aider, changez la variable $ str avec votre texte

$re = '/\d+:\d+/m';
$str = 'Caint Use My Phone (Suite) 3:34';

echo preg_replace($re, '', $str);


1 commentaires

Belle réponse, cela aurait également résolu mon problème, alors j'ai voté pour votre réponse. Cependant, j'ai vu le post de Nick avant la main. Merci beaucoup d'avoir pris le temps de m'aider.




2
votes

Vous devriez essayer cette expression régulière / \ d +: \ d + $ / gm .

  • \ d + correspondra à 1 chiffre ou plus.
  • : correspondra au caractère littéral de «:».
  • $ recherchera le modèle ci-dessus à la fin de la ligne.
  • g continuera à rechercher chaque ligne sur chaque ligne (sans elle vous retournerez après le premier match)
  • m activera la recherche multi-lignes, ce qui signifie que la recherche fera référence au $ à la fin de chaque ligne (sans elle, il cherchera à la fin du texte uniquement)

Bonne chance


0 commentaires

2
votes

Vous pouvez simplement couper le dernier caractère de chaque chaîne tant qu'il s'agit d'un nombre ou de deux points:

foreach($html->find('ol.tracklist li.track') as $element) {
    $text = $element->plaintext;

    while(preg_match('/[\d:]$/', $text[strlen($text)-1])) {
        $text = substr($text, 0, strlen($text)-1);
    }

    echo $text;
    print '<br>';
}

DÉMO PHP


0 commentaires

1
votes

Si c'est toujours le même format hh: mm, vous pouvez trouver le dernier espace avec strrpos ()

$string = 'Cel U Lar Device 6:28';
$string = substr($string, 0, strrpos($string, ' '));


0 commentaires