2011-12-10 2 views
0

essayant d'attraper les personnages au début de la chaîne et les nouvelles lignes la chaîne estexpressions régulières stimuler C++

.V/1LBOG\n.F/AV0094/08NOV/SAL/Y\n.E/0134249356001" 

l'expression régulière j'utilise est de la chaîne ci-dessus que je dois attraper .V/et .E/

^.[VE]/* 

Mais il semble que pour ctach .V/peut-on voir pourquoi je pensais que^signifie que les nouvelles lignes aswell début de chaînes? toute aide sera très reconnaissante car j'ai eu ce problème pendant un certain temps maintenant. Si ce n'est pas la bonne façon de faire cela, pourriez-vous proposer une manière différente.

+0

vous avez besoin des valeurs "/ 1LBLOG" et "0134249356001"? – rkmax

+0

non au lieu de cela j'en ai besoin pour vérifier que .V/et .E/sont présents au début d'une nouvelle ligne donc son ".V /" n'est pas 1BLOG et ".E/"pas 0134249356001 j'espère que cela aide? – CodersSC

Répondre

0

Regex 101:

^ signifie début de la chaîne. Et vous l'avez deviné correctement. Il ne peut y avoir qu'un seul début de chaîne.

^.[VE]/* 

signifie:

alignement de début de chaîne, suivi d'un caractère (autre que le saut de ligne), suivie soit par un V ou d'un E, suivi de 0 à n / (gourmand).

Probablement vous voulez quelque chose comme ceci:

\.[VE].*?(?:\\n|$) 

Ce qui signifie correspondent à un point, suivi par V ou E et tout match jusqu'à \n ou en fin de chaîne.

Commentaire si je me trompe.

Alors .V/1LBOG\n.F/AV0094/08NOV/SAL/Y\n.E/0134249356001"

ressemble à ceci?

.V/1LBOG 
.F/AV0094/08NOV/SAL/Y 
.E/0134249356001" 

Si oui, alors vous devez changer votre regex un peu:

\.[VE].* 

Abuser le fait que . ne correspond pas à des sauts de ligne par défaut.

+0

qui est correct mais au lieu de tout jusqu'à ce qu'un \ n ou une fin de chaîne il devrait inclure \ n ou jusqu'à la fin de la chaîne parce que .E est sur une nouvelle ligne ? Commentez si vous n'avez pas bien compris – CodersSC

+0

@ShamariCampbell Vérifiez la réponse mise à jour – FailedDev

+0

oui c'est à quoi ressemble la chaîne et à partir de cela je dois vérifier .V/et .E/sont présents mais cette regex ^. [VE]/seulement attrape .V /? – CodersSC

0

si vous avez besoin .V ou .E essayer ^.(V|E)/* le ou | opérateur est utile pour vérifier ^.V/* ou ^.E/*

+0

je aurais besoin de vérifier pour les deux mais pour autant que je me souvienne je peux simplement changer cet opérateur à l'opérateur & ou est-il && – CodersSC

+0

je vous recommande de l'essayer vous-même avec différents exemples, tout éditeur de texte qui supporte les expressions régulières.J'utilise le texte Sublime 2 – rkmax

0

.. dans les expressions régulières correspond à un seul caractère, pas un littéral .. Si vous voulez correspondre à une période littérale, vous devez lui échapper (\.). * ne correspond à aucun nombre de caractères (comme le ferait la plupart des shells), mais correspond plutôt à zéro ou plusieurs instances de ce que vous avez placé avant. Par exemple, A* correspondra à la lettre littérale A, AAAA etc., et .* correspondra à n'importe quelle chaîne.

^ signifie le début d'une ligne. ^\.[VE]/ correspondra .V/ et .E/ (mais seulement au début de la ligne).

+0

ok donc avec la recherche regex est-ce possible de vérifier aussi la météo .V/et .E/sont au début de la chaîne ou de la nouvelle ligne etc? – CodersSC

+0

Si vous utilisez regexp_match() avec quelque chose comme '^ \. [VE] /.*$' ('' '' '' est la fin de la ligne), il ne doit correspondre qu'aux lignes commençant par '.V /' ou ' .E/'. – Staven

+0

correspond au .V/mais pas au .E/correspond uniquement si .E/était le début de la chaîne – CodersSC