2
votes

RegEx pour faire correspondre une liste de caractères entre deux nombres

Lors de l'importation dans la boutique en ligne dans la description de la marchandise, je dois supprimer certaines balises. Ils sont entre les nombres.

Il faut exactement l'expression régulière, car cet ensemble de balises, qui entre les nombres, est déjà présent dans le document à de nombreux endroits. Et en utilisant la recherche de remplacement, le document est cassé.

Comment puis-je supprimer des balises supplémentaires, mettre un tiret avec?

Les nombres peuvent être différents.

Tentative

 13-20 kg

Entrée

 13</li></ul></div><div><p>20 kg

Sortie:

[0-9](.*)[0-9]


1 commentaires

Si les balises sont toujours les mêmes, pourquoi regex? Remplacez

par - .


3 Réponses :


1
votes

Ce que vous devez faire est de trouver le premier nombre suivi de caractères non numériques, puis le deuxième nombre suivi de espace ou de caractères alpha, voici comment je le ferais:

$str = "13</li></ul></div><div><p>20 kg";

echo $res = preg_replace('/^([0-9]+)[^0-9]+([0-9]+[a-z ]+)$/', '\1-\2', $str);


0 commentaires

1
votes

Ce RegEx peut vous aider à capturer votre sortie cible:

([0-9]+)([A-Za-z\<\>\/\\]+)([0-9]+\skg)


0 commentaires

1
votes

Ce que vous semblez analyser ressemble à du HTML et vous devriez d'abord essayer d'éviter d'analyser le HTML à l'aide de regex. Mais parfois, lorsque vous avez affaire à des structures non imbriquées et que vous souhaitez effectuer un travail rapide, vous pouvez utiliser regex. Essayez cette expression régulière,

(\d+)\D+(\d+)

Et remplacez-la par \1-\2

Cela commencera essentiellement à capturer des modèles avec un ou plusieurs chiffres en utilisant (\ d +) et capturez-le dans group1, puis correspondra à un ou plusieurs non-chiffres en utilisant \ D + et ne les capturera dans aucun groupe pour les exclure pendant le remplacement et enfin à nouveau captureront un ou plusieurs chiffres en utilisant (\ d +) et captureront dans le groupe2 et en remplaçant toute la correspondance par \ 1- \ 2 (ou $ 1 - $ 2 selon votre saveur regex) conservera les nombres et placera juste un trait d'union entre eux.

Démo Regex


0 commentaires