0
votes

Extraire des données entre deux chaînes avec PHP

J'ai la chaîne suivante:

$lat = preg_match_all('#lat":"(.*?)","lng#', $html, $matches);
$lat = matches[1];


5 commentaires

... Cela ressemble à une chaîne JSON. Pourquoi avez-vous besoin de regex pour cela?


String JSON partielle / tronquée. S'il est possible de conserver la structure complète, avec {} , puis analysant ce serait idéal comme dit Dharman. En outre, le titre de la question me rappelle fortement l'exemple de ce méta-post sur le problème XY .


@Dharman, mon $ HTML n'est qu'une version lumineuse du résultat d'un fichier_get_contents () .


Dans quel fichier lisez-vous? Qu'est-ce que l'intérieur du fichier? Comment avez-vous eu une partie mal formée de ce fichier dans votre variable?


Si le contenu complet est une ressource JSON, alors - Stackoverflow.com/Questtions/29308898/... ou pour un fichier - stackoverflow.com/questions/4343596/...


3 Réponses :


2
votes

Cette expression extraire probablement nos données de latitude et de longitude souhaitées dans ce groupe de capture (. +?) code>, car il supprime également les espaces indésirables:

45.491834
-73.606953


2 commentaires

Bonjour, merci pour votre aide. Et si je n'ai besoin que de seulement le lat dois-je utiliser le foreach ?


Si vous n'avez besoin que d'un et que vous devez utiliser regex, utilisez preg_match et supprimer "lng" alternance du motif de regex.



3
votes

json_decode est beaucoup plus fiable que la regex. Ajouter des accolades et une valeur pour l'élément manquant "adresse" et vous pouvez indexer directement dans le résultat: xxx

sortie: xxx < / pré>


2 commentaires

Pourquoi créer une nouvelle propriété root pendant le décodage puis y accéder? alors que vous pouvez décoder directement?


Merci de votre aide. Cela fonctionne mais comme j'explique dans les commentaires, mon $ HTML n'est qu'une version lumineuse du résultat d'un fichier fichier_get_contents () .



3
votes

"lat": "\ s * ([^"] *? \ s * ")," GNL ":" \ s * ([^ "] *? \ k

Valeurs dans le groupe 1 et groupe 2 P>

https: // regex101.com/r/jdwl84/1 p>

code PHP p>

Démo de sandbox P>

( lat, long ) = ( 45.491834, -73.606953 )
( lat, long ) = ( 44.491834, -72.606953 )
( lat, long ) = ( 43.491834, -71.606953 )


5 commentaires

Dois-je l'intégrer comme ceci: preg_match_all ('"lat": "\ s * ([^"] *? \ S * ")," GNL ":" \ s * ([^ "] s *) "\ k ', $ html, $ letlng); echo 'lat est'. $ Latlng [0]; ?


@Popo - Vous correspondez à une paire, une coordonnée. Faites-le cependant que vous voulez. [[LAT, LONG], [LAT, LONG] ,]


Donc, comme ceci: echo $ letlng [lat, long] ?


@popol - ouais, comme echo "(lat, long) = (". $ $ Letlng [$ i] [1]. "$ i] [2].") \ n ";


@popol - juste un avertissement pour ya. Si vous ne correspondez pas aux paires, une (ce n'est pas un si) et vous n'aurez pas de coordonnées viables.