2010-10-11 10 views
0

Comment faire correspondre une regex où un saut de ligne peut se produire n'importe où? Par exemple, si j'essaie de faire correspondre des «milliers d'œufs de tortues», cela devrait correspondre à tous les cas suivants. (Ou même les cas où les sauts de ligne sont à l'intérieur des mots.)Regex correspondant aux sauts de ligne

Scientists have revealed that a mammoth effort to move *thousands of turtle eggs* from beaches around the Gulf of Mexico after the Deepwater Horizon oil spill may have saved almost 15,000 of the reptiles. 

Scientists have revealed that a mammoth effort to move *thousands 
of turtle eggs* from beaches around the Gulf of Mexico after the Deepwater Horizon oil spill may have saved almost 15,000 of the reptiles. 

Scientists have revealed that a mammoth effort to move *thousands of 
turtle eggs* from beaches around the Gulf of Mexico after the Deepwater Horizon oil spill may have saved almost 15,000 of the reptiles. 

Scientists have revealed that a mammoth effort to move *thousands of turtle 
eggs* from beaches around the Gulf of Mexico after the Deepwater Horizon oil spill may have saved almost 15,000 of the reptiles. 
+0

la prochaine fois, s'il vous plaît nous fournir des informations dont regex bibliothèque, ou l'application que vous utilisez, car les différentes bibliothèque/app donnerait une réponse correcte différente. Vous pouvez également donner un signal en choisissant plusieurs balises appropriées. – Vantomex

+1

@Vantomex La bibliothèque regex est-elle importante? Je pourrais faire avec une réponse générique, non liée à une bibliothèque/application. - Merci –

+0

toutes les bibliothèques regex ne supportent pas le quantificateur possessif, le groupement atomique, etc. elles peuvent être utilisées pour optimiser la vitesse d'analyse syntaxique par la bibliothèque. En outre, ils sont autant de différences de règles pour obtenir le même résultat entre les bibliothèques regex. – Vantomex

Répondre

3
/thousands\s+of\s+turtle\s+eggs/ 

ou cette version pour assurer milliers et oeufs ne font pas partie d'un autre mot (comme ... eggsbath

/\bthousands\s+of\s+turtle\s+eggs\b/ 
+0

Qu'en est-il des cas où un saut de ligne peut se produire dans les mots? –

+0

Il suffit d'ajouter cette possibilité entre les lettres: '/ \ bt [\ r \ n] * h [\ r \ n] * o [\ r \ n] * ...' –

+0

ok ... pensait s'il y avait toutes les autres solutions. :) –

0

Vous pouvez utiliser le drapeau "s" pour faire correspondre tous les sauts de ligne.

Si vous utilisez l'expression rationnelle "/reptiles..*?sc/gis" il correspondra "reptiles.sc"

Vous pouvez essayer cette link

Ceci est un éditeur de regex en ligne

0

utilisez le commutateur 's'. Alors $ devient le début et la fin de la chaîne entière et les retours à la ligne sont considérés comme des espaces blancs. Donc, tant que vous utilisez \ s pour faire correspondre les espaces entre les mots. par exemple:

#thousands \ SOF \ sturtle \ seggs # si

+0

Désolé, mais vous êtes loin. Les nouvelles lignes sont toujours considérées comme des espaces, et '\ s 'les correspond toujours. Le commutateur 's' permet au ** dot ** (' .') de correspondre aux nouvelles lignes, ce qui n'est pas le cas par défaut. C'était à l'origine (et malheureusement) appelé le mode * single-line *, mais il est plus communément connu sous le nom de * dot-matches-all * ou * DOTALL * mode aujourd'hui. Le commutateur 's' n'a aucun effet sur les ancres ('^'et' $ '). Voir la section "Dot" et "Anchors" de ce tutoriel pour plus de détails: http://www.regular-expressions.info/tutorial.html –

+0

merci. Je ne le savais pas, j'ai juste supposé que c'était la façon dont je l'ai mentionné. Je vais regarder dedans. :) – Karthick