Voulez Regex pour arrêter à la première occurrence de “.” et “;”
Je suis en train d'extrait de phrase, d'un paragraphe, avec des motifs comme
Current. time is six thirty at Scotland. Past. time was five thirty at India; Current. time is five thirty at Scotland. Past. time was five thirty at Scotland. Current. time is five ten at Scotland.
Quand j'utilise les Regex comme
/current\..*scotland\./i
Cela correspond à l'ensemble de la chaîne de
Current. time is six thirty at Scotland. Past. time was six thirty at India; Current. time is five thirty at Scotland. Past. time was five thirty at Scotland. Current. time is five ten at Scotland.
Au lieu de cela, je veux arrêter à la première occurrence de "." à tous les groupes de capture comme
Current. time is six thirty at Scotland.
Current. time is five ten at Scotland.
De même pour le texte comme
Past. time was five thirty at India; Current. time is six thirty at Scotland. Past. time was five thirty at Scotland. Past. time was five ten at India;
Lorsque J'Utilise Les Regex Comme
/past\..*india\;/i
Ce match ensemble de la chaîne
Past. time was five thirty at India; Current. time is six thirty at Scotland. Past. time was five thirty at Scotland. Past. time was five ten at India;
Ici je veux capturer tous les groupes ou le premier groupe comme les suivantes, et Comment l'arrêter à la première occurrence de ";"
Past. time was five thirty at India;
Past. time was five ten at India;
Comment je peux faire de l'expression régulière à l'arrêt "," ou ";" avec les exemples ci-dessus?
Votre modèle est gourmand, et correspondent à autant qu'il le peut. Rendre paresseux en ajoutant un
?
, de sorte qu'il ressemble /current\..*?scotland\./i
.OriginalL'auteur Pramod Shinde | 2014-06-13
Vous devez vous connecter pour publier un commentaire.
Il ya quelques choses que vous ne devrait pas vraiment être fait avec votre regex, tout d'abord, comme l'a souligné Arnal Murali, vous ne devriez pas être à l'aide d'un gourmand regex, mais plutôt utiliser le paresseux version:
Je pense que c'est une règle générale de regex pour aller pour les paresseux option en premier car il est plus souvent ce que vous voulez. Deuxièmement, vous n'avez pas vraiment envie d'utiliser
.
pour correspondre à tout, puisque vous ne voulez pas permettre à cette partie de votre regex pour correspondre.
ou;
vous pouvez mettre ceux-ci dans un sens négatif du groupe de capture pour capturer n'importe quoi mais:et
ou de couvrir à la fois avec:
(évidemment, cela pourrait ne pas être ce que vous voulez faire, y compris pour montrer comment étendre ce)
C'est aussi une bonne règle de pouce, si vous rencontrez des difficultés avec un regex faire tout jokers plus spécifiques (dans ce cas changer de correspondant à tout
.
à l'appariement de tout, mais.
et;
avec[^.;]
)Merci. toujours agréable à entendre. 🙂
OriginalL'auteur Mike H-R
OriginalL'auteur Bala
Comme Amal dit, votre modèle est gourmande et vous devez rajouter un ? pour le rendre paresseux. Je voudrais utiliser ce qui suit pour obtenir UNIQUEMENT la première occurrence de la chaîne que vous demandez:
Et ce, pour obtenir chaque groupe suivant ce modèle, en prenant en compte ';' ainsi que '.':
Ce dernier signifie en gros: Trouver toutes les occurrences de "courant" et arrêtez-vous lorsque vous atteignez la première "écosse" suivi par un '.' ou un ';'
.
et;
dans une classe de caractère. Donc/current\..*?scotland[.;]/i
suffirait.Vous êtes correct. J'étais tout simplement extra détaillé tôt le matin 🙂 Édité.
OriginalL'auteur sprk1