expression régulière pour rechercher des expressions du FOLKLORE
J'ai des données qui ressemblent à ce
john, dave, chris
rick, sam, bob
joe, milt, paul
J'utilise cette expression pour faire correspondre les noms
/(\w.+?)(\r\n|\n|,)/
qui fonctionne pour la plupart, mais le fichier se termine brusquement après le dernier mot de la signification de la dernière valeur n'est pas dans \r\n
, \n
ou ,
il se termine avec des expressions du FOLKLORE. Est-il un moyen de faire correspondre les expressions du FOLKLORE dans les regex, donc je peux le mettre dans ce deuxième regroupement?
- Êtes-vous en essayant de capturer tous les noms dans un groupe ou un groupe de capture par nom?
- Quelle plate-forme est-ce?
- une seule chose à faire lorsque vous rencontrez des problèmes avec la regex est d'essayer d'éléments de modèle vous dans l'isolement. si vous êtes préoccupé par le jeton à la fin, testez votre expression sans elle.
- je voulais juste rajouter un grand regex site de test: regexplanet.com/simple
- En double? stackoverflow.com/questions/1171284/regex-to-match-eof
- Je suis d'accord; fusionné
Vous devez vous connecter pour publier un commentaire.
La réponse à cette question est
\Z
m'a fallu un certain temps pour le comprendre, mais il fonctionne maintenant. Notez qu'à l'inverse,\A
correspond au début de l'ensemble de la chaîne (par opposition à^
et$
correspondant au début d'une ligne).(\s*)\?>(\s*)\Z
... et après plus de creuser voici ce serait de travailler sur un dossier de projet:(\s*)\?>(\s*)(\n*)(\W)\Z
pour info: c'est pour remplacer tout de fermeture des balises php par des sauts de ligne à la fin du fichier.\A
travaille également dans Visual Studio rechercher et remplacer. Comme toujours l'utilisation de telles choses avec prudence, mais il m'a sauvé une tonne de manuel vous embêter une fois que j'ai été heureux, il serait réellement faire la bonne chose.Scanner
classe pour lire l'intégralité d'un fichier à la fois; si j'utilise\Z
comme délimiteur, traînant le caractère de saut de ligne garni. Quand j'ai changé de délimiteur pour\z
, suivi de caractère préservé. Il semble que Martin Dorey réponse s'applique également à Java.EOF n'est pas réellement un personnage. Si vous avez un multi-ligne de chaîne, puis '$' correspondra à la fin de la chaîne ainsi que la fin d'une ligne.
En Perl et ses frères,
\A
et\Z
correspondent au début et à la fin de la chaîne, totalement ignorant des sauts de lignes.GNU extensions POSIX regexes utilisation
\`
et\'
pour les mêmes choses.Dans Visual Studio, vous pouvez trouver des expressions du FOLKLORE comme suit:
$(?![\r\n])
. Cela fonctionne si vos fins de ligne sont CR, CRLF, ou juste de LF.Comme un bonus, vous pouvez vous assurer que tous vos fichiers de code, un dernier retour à la ligne du marqueur ainsi:
Comment cela fonctionne:
Trouver toute fin de ligne (un zéro-largeur match) qui n'est pas précédée par le CR ou LF, et n'est pas suivie par le CR ou LF. Certains pensaient va vous montrer pourquoi cela fonctionne!
Noter que vous devez Remplacer votre ligne souhaitée,-caractère de fin, que ce soit CR, LF, ou CRLF.
Revanche le comportement de Ryan suggéré \Z \z:
perlre sez:
Une traduction de l'essai en Ruby (1.8.7, 1.9.2) se comporte de la même.
Avez-vous vraiment l'capture de la ligne séparateurs? Si non, cette expression devrait être tout ce dont vous avez besoin:
Pars du principe que toutes les sous-chaînes que vous voulez faire correspondre sont entièrement constitués de caractères de mot, comme dans votre exemple.
Peut-être essayer $ (EOL/EOF) au lieu de (\r\n|\n)?
En supposant que vous utilisez la bonne modificateur obligeant à traiter de la chaîne dans son ensemble (et non pas ligne par ligne, et si \n fonctionne pour vous, vous l'utilisez), il suffit d'ajouter une autre alternative, à la fin de la chaîne: (\r\n|\n|,|$)
J'ai récemment été la recherche de quelque chose comme cela, mais pour JavaScript.
Mettre cette question ici, ainsi que toute personne ayant le même problème peut bénéficier
En gros, cela pourrait correspondre à la fin de la ligne, ce qui n'est pas suivie par un retour chariot ou de caractères de nouvelle ligne. Pour l'essentiel, c'est le même que
\Z
mais pour le JavaScript./(\w.+?)(\r\n|\n|,|$)/
\w+
, droit?