Regex Ignorer certaines parties de la chaîne dans le match
Voici ma chaîne:
address='St Marks Church',notes='The North East\'s premier...'
La regex que j'utilise pour saisir les différentes pièces à l'aide match_all
est
'/(address|notes)='(.+?)'/i'
Les résultats sont les suivants:
adresse => St Marques Église
notes => Le Nord-Est\
Comment puis-je obtenir de l'ignorer l \' caractère pour les notes?
Voudriez-vous de ne considérer que les caractères alphanumériques dans votre expression?
Pas fondamentalement quoi que ce soit entre 'et le second' l'exclusion de \'. Je suis un peu une regex newbie je crains donc sans doute le premier bit de mal?
Pas fondamentalement quoi que ce soit entre 'et le second' l'exclusion de \'. Je suis un peu une regex newbie je crains donc sans doute le premier bit de mal?
OriginalL'auteur Paul Phillips | 2013-06-06
Vous devez vous connecter pour publier un commentaire.
Ne sais pas si vous êtes d'emballage de votre chaîne avec heredoc ou des guillemets, mais un moins gourmand approche:
Sortie
Une autre méthode avec preg_split:
De sortie ressemble à ceci:
Super lent old-skool méthode:
preg_split ()
oùexplode()
est le sensible, l'appel de fonction. En outre, si\'
est possible dans la chaîne de caractères, alors il est juste de supposer,
et=
sont également possibles. La troisième, je n'ai pas testé encore, mais qu'il soit a une faute de frappe ou d'employer des variables qui doivent être évités autant que possible.J'ai enlevé mon downvote car j'apprécie que vous essayez de réparer votre réponse. Malheureusement, j'ai l'impression d'avoir à re-downvote, car cette réponse, c'est ce qui suggère une faible et/ou peu fiables méthodes.
Faire des concessions pour de mauvaises méthodes de stockage de données n'est jamais conseillé. Ce flux de texte doivent être stockés dans JSON, XML ou CSV même et traitées avec les méthodes standard de l'industrie, idéalement. Apprécions votre opinion.
OriginalL'auteur AbsoluteƵERØ
Vous doivent correspondre à une fin de citation qui n'est pas précédé d'une barre oblique inverse donc:
Ce
[^\\]
force le caractère précédant immédiatement le caractère ' être rien, mais une barre oblique inverse."address='.',notes='The North East\'s premier...'"
?@Anubhava fait allusion, cette réponse est incorrecte et mangle le rendement attendu des valeurs. regex101.com/r/90fBSr/1 (downvoted trompeuse)
OriginalL'auteur Kimball Robinson
Parce que vous avez posté que vous utilisez
match_all
et le haut des balises dans votre profil sontphp
etwordpress
, je pense qu'il est juste de supposer que vous utilisezpreg_match_all()
avec php.Les modèles suivants correspondra à la sous-chaînes nécessaires pour buildyour souhaité tableau associatif:
Modèles qui génèrent un fullstring match et 1 groupe de capture:
/(address|notes)='\K(?:\\\'|[^'])*/
(166 étapes, le lien de démonstration)/(address|notes)='\K.*?(?=(?<!\\)')/
(218 étapes, le lien de démonstration)Modèles qui génèrent des 2 groupes de capture:
/(address|notes)='((?:\\\'|[^'])*)/
(168 étapes, le lien de démonstration)/(address|notes)='(.*?(?<!\\))'/
(209 étapes, le lien de démonstration)Code: (Démo)
De sortie:
Modèles #1 et #3 utiliser des alternatives pour permettre aux non-caractères apostrophe ou des apostrophes non précédé d'une barre oblique inverse.
Modèles #2 et #4 (exigera un supplément de barre oblique inverse lors de la mise en œuvre avec php démo) utilisation lookarounds pour s'assurer que les apostrophes, précédé d'un antislash ne pas finir le match.
Quelques remarques:
À l'aide de groupes de capture, les solutions de rechange, et lookarounds coûts de modèle d'efficacité. La limitation de l'utilisation de ces composants permet d'améliorer les performances. À l'aide de classes de caractère niées souvent améliore les performances.
À l'aide de
\K
(qui redémarre le fullstring match) est utile lorsque vous essayez de réduire les groupes de capture et il réduit la taille du tableau de sortie.Hey Mick vous à la traîne tout le monde est passé de réponses ou que le mien?
Je suis tombé sur cette page en faisant des recherches pour une autre question sur un autre StackExchange site. Il n'y a rien trollish sur ma conduite. Si je voulais être un troll, je dirais que vous avez des noms ou, plus simplement, de ne pas laisser un commentaire. Non, ce que j'ai fait est identifié une page qui contenait 3 réponses incorrectes (maintenant 2 après anubhava supprimé son), à juste titre downvoted de mauvaises réponses que désinformer, de gauche la note explicative (avec démonstration des liens), édité à la question, et a fourni une approche globale et réfléchie réponse. Ce que j'ai fait ne doit être considérer "l'amélioration du contenu".
Je suppose que c'utilisé pour le travail (même si je ne suis pas sûr de savoir comment) sinon les gens juste jeté un coup d'œil et de la pensée, il a travaillé, mais il a été marqué comme réponse, donc il a probablement contribué à l'OP de comprendre leur problème. Quoi que ce soit.
Il n'a jamais fonctionné comme prévu. L'OP aveuglément confiance les réponses. La boule de neige s'est aveugle confiance aveugle depuis des années.
OriginalL'auteur mickmackusa