Regex correspond à tout après le point d'interrogation?

125

J'ai un flux dans Yahoo Pipes et je veux tout faire correspondre après un point d'interrogation.

Jusqu'à présent, j'ai trouvé comment faire correspondre le point d'interrogation en utilisant ..

\?

Maintenant, juste pour faire correspondre tout ce qui est après / suit le point d'interrogation.

marque
la source
2
\?.*correspond à tout (y compris une chaîne vide) après ?.
khachik
Quel langage de programmation utilisez-vous?
Mark Byers
1
Pour ceux qui utilisent Java, c'est"\\?"
CodyBugstein

Réponses:

251
\?(.*)

Vous voulez le contenu du premier groupe de capture.

thejh
la source
15
@Mark si c'est ce dont vous aviez besoin (même si cette question est ancienne!), Veuillez la marquer comme réponse.
Pieter VDE
5
@Dreamonic Ne pense pas que ça se passe :(
Starkers
4
@Starkers Vous avez raison. Cela n'arrivera pas. Mark n'a pas été depuis Feb 5 '11 at 10:41. Il est toujours bon de signaler chaque changement que nous obtenons. Peut-être que quelqu'un apprendra de Dreamonic en le soulignant.
DutGRIFF
1
comment captureriez-vous le contenu après le dernier point d'interrogation? Je veux «ancrer» par la suite - je ne sais pas si l'ancre est le bon mot.
BKSpurgeon
2
@BKSpurgeon premier groupe de capture dans ^. * \? ([^?] *) $
Devrait
61

Essaye ça:

\?(.*)

Les parenthèses sont un groupe de capture que vous pouvez utiliser pour extraire la partie de la chaîne qui vous intéresse.

Si la chaîne peut contenir de nouvelles lignes, vous devrez peut-être utiliser le modificateur «dot all» pour permettre au point de correspondre au caractère de nouvelle ligne. Que vous deviez le faire ou non et comment le faire dépend de la langue que vous utilisez. Il semble que vous ayez oublié de mentionner le langage de programmation que vous utilisez dans votre question.

Une autre alternative que vous pouvez utiliser si votre langage prend en charge les assertions lookbehind à largeur fixe est:

(?<=\?).*
Mark Byers
la source
Oh la largeur fixe? Puis-je regarder en arrière pour quelque chose comme ça? Sujets: code, programmation, design Donc je veux sélectionner les deux points et regarder en arrière jusqu'au cpaital T des sujets et aller jusqu'au bout sur la ligne? (dans ce cas, la fin de la ligne est «design».
Mark
@Mark: Quelle langue utilisez-vous?
Mark Byers
J'utilise Yahoo Pipes qui exclut les regex. J'ai obtenu une réponse à cette question et je cherche maintenant une expression régulière qui sélectionne 6 caractères derrière un deux-points et autant de (tous) avant ..
Mark
@Mark: J'ai vérifié votre liste de questions mais je ne vois pas votre nouvelle. Êtes-vous sûr de l'avoir publié?
Mark Byers
Je poserai à nouveau cette nouvelle question dans quelques instants. Je suppose qu'il est préférable de garder mes questions séparées et que j'aurais vraiment dû poser les deux en même temps. Merci
Mark
36

Avec la technique positive du regard en arrière :

(?<=\?).*

(Nous recherchons un texte précédé d'un point d'interrogation ici)

Input: derpderp?mystring blahbeh
Output: mystring blahbeh

Exemple

Fondamentalement, il ?<=s'agit d'une construction de groupe, qui nécessite le point d'interrogation échappé, avant qu'une correspondance ne puisse être établie.

Ils fonctionnent très bien, mais toutes les implémentations ne les prennent pas en charge.

DarkNeuron
la source
13
\?(.*)$

Si vous voulez faire correspondre tous les caractères après "?" vous pouvez utiliser un groupe pour faire correspondre n'importe quel caractère, et vous feriez mieux d'utiliser le signe "$" pour indiquer la fin de la ligne.

s3v3n
la source
1
Dans la plupart des implémentations d'expressions régulières, le caractère .par défaut ne correspond pas au caractère de nouvelle ligne. Par conséquent, même sans le caractère de fin de ligne dans l'expression, il correspondrait jusqu'à la fin de la ligne.
Mark Byers du
2

Consultez ce site: http://rubular.com/ Fondamentalement, le site vous permet de saisir un exemple de texte (ce que vous recherchez sur votre site), puis lorsque vous créez l'expression régulière, il mettra en évidence ce qui correspond à temps réel.

Austin Lin
la source
Merci pour cela, savez-vous comment faire correspondre un deux-points? Et un certain nombre de caractères avant les deux points?
Mark
/([a-zA-Z]{4}):/va correspondre Test: Welcomeet saisirTest
Austin Lin
0

str.replace(/^.+?\"|^.|\".+/, '');

Ceci est parfois mauvais à utiliser lorsque vous voulez sélectionner quoi d'autre à supprimer entre "" et que vous ne pouvez pas l'utiliser plus de deux fois dans une chaîne. Tout ce qu'il fait est de sélectionner tout ce qui n'est pas entre "" et de le remplacer par rien.

Même pour moi, c'est un peu déroutant, mais j'essaie de l'expliquer. ^.+?(pas quelque chose d'OPTIONNEL) jusqu'au premier "alors |Or / stop (toujours à la recherche de ce que cela signifie vraiment) jusqu'à / at ^.n'a rien sélectionné avant le 2ème en "utilisant ( |stop / at). Et sélectionnez tout ce qui vient après avec. +.

Kadhem
la source
Veuillez envisager d'ajouter une description de votre code afin que nous sachions ce qu'il fait et pourquoi.
Pika the Wizard of the Whales