trouver tous les textes avant d'utiliser les regex
Comment puis-je utiliser les regex pour trouver tout le texte avant de le texte "Tout le texte avant de cette ligne sera inclus"?
Je comprend quelques exemples de texte ci-dessous par exemple
This can include deleting, updating, or adding records to your database, which would then be reflex.
All text before this line will be included
You can make this a bit more sophisticated by encrypting the random number and then verifying that it is still a number when it is decrypted. Alternatively, you can pass a value and a key instead.
Vous devez vous connecter pour publier un commentaire.
En commençant par une explication... passer à la fin pour obtenir rapidement des réponses
De match jusqu'à une partie spécifique du texte, et de confirmer qu'il est là, mais pas l'inclure avec le match, vous pouvez utiliser une anticipation positif, à l'aide de la notation
(?=regex)
Cela confirme que 'regex' se trouve à cette position, mais correspond à la position de départ, et non le contenu de celui-ci.
Donc, ce qui nous donne l'expression:
Où
.
est un caractère, et*?
est un paresseux match (consomme moins possible, par rapport à la régulière*
qui consomme la plus grande quantité possible).Cependant, dans presque tous les regex saveurs
.
, d'exclure le retour à la ligne, donc nous avons besoin d'utiliser explicitement un drapeau pour inclure des sauts de ligne.Le drapeau à utiliser est
s
, (qui signifie "une Seule ligne de mode", même s'il est aussi appelé "DOTALL" mode en des saveurs).Et cela peut être mis en œuvre de diverses manières, y compris...
À l'échelle mondiale, pour /à base de regexes:
En ligne, mondiale pour la regex:
En ligne, ne s'applique qu'à la partie entre crochets:
Et comme un argument de fonction (dépend de la langue que vous êtes en train de faire la regex avec).
Alors, probablement que le regex vous voulez, c'est ceci:
Cependant, il ya quelques mises en garde:
Tout d'abord, pas tous les regex saveurs support paresseux de quantificateurs - vous pourriez avoir à utiliser juste
.*
, (ou éventuellement utiliser une logique plus complexe en fonction des besoins précis si "Tout le texte avant de..." peut apparaître plusieurs fois).En deuxième lieu, tous les regex saveurs de soutien lookaheads, de sorte que vous aurez besoin d'utiliser capturé les groupes pour obtenir le texte que vous souhaitez faire correspondre.
Enfin, vous ne pouvez pas toujours spécifier des drapeaux, comme le
s
ci-dessus, donc peut-être besoin de correspondre "rien ni saut de ligne"(.|\n)
ou peut-être[\s\S]
(espaces et de ne pas les espaces) pour obtenir l'équivalent de correspondance.Si vous êtes limité par l'ensemble de ceux-ci (je pense que le XML de mise en œuvre de l'est), alors vous aurez à faire:
Puis extraire le premier sous-groupe dans le résultat du match.
En fonction de ce particulier de l'expression régulière framework que vous utilisez, vous devrez peut-être inclure un indicateur pour indiquer que
.
peuvent correspondre à des caractères de saut de ligne ainsi.La première (et la seule) le sous-groupe comprendra le texte correspondant. Comment vous extrait qui dépendra encore une fois de ce langage et de l'expression régulière framework que vous utilisez.
Si vous voulez inclure le "Tout le texte avant de cette ligne..." le texte, puis toute la durée du match est ce que vous voulez.
Cela devrait le faire:
Retourne: