2010-07-16 2 views
0

Je cherche à correspondre à des chaînes d'un fichier qui sont préfixésPerl Regex Aide

/** 

et ont une postfix

*/ 

Avec un certain nombre de caractères/espaces/sauts de ligne entre les deux.

par exemple:

/** anything 
    anything 
*/ 

J'ai cependant m/(\/\*\*).*?(\*\/)/ jusqu'à présent, cela ne gère pas les nouvelles lignes. Je sais que le correctif doit être simple, mais j'ai une expérience d'expressions régulières très limitée.
Question supplémentaire: Quelqu'un at-il un bon site Web pour apprendre des expressions régulières?

+3

'perldoc -q comments' – ghostdog74

+0

O'Reilly a un grand livre pour apprendre des expressions régulières. Vous obtenez une estimation quant à ce que le titre est. :) – Ether

Répondre

3

Ajouter le smodifier après:

m/(\/\*\*).*?(\*\/)/s 

Mais si c'est le code source vous travaillez, soyez prudent:

print 'a string /**'; 
int a = b + c; 
print '*/'; 

// /** 
a = a - c; 
// */ 

Il est vraiment, mais une ressource en ligne si elle vient à apprentissage regex: http://www.regular-expressions.info/

+0

Notez que je ne dis pas qu'il n'existe pas d'autres bonnes ressources en ligne, mais celle que j'ai posté devrait être suffisante pour toute personne nouvelle à regex pour bien comprendre comment utiliser regex-es. –

+0

Fonctionne, aussi merci pour le site Web. – James

0

Sans utiliser/s avec make '.' se comporter différemment, ce qui suit devrait fonctionner aussi:

m/(\/\*\*)(\r?\n|.)*(\*\/)/ 

Pour un lieu d'apprentissage perl?

http://perldoc.perl.org/ http://perldoc.perl.org/index-tutorials.html Ceci est ma référence ultime, toujours. Mais si vous n'aimez pas lire quelque chose dans un style manuel qui est un peu alésé. Essayez les expressions régulières Mastering de Jeffrey Friedl d'O'Reilly, ce qui est plus intéressant.

http://oreilly.com/catalog/9781565922570

+1

Au lieu de '(\ r? \ N |.)', Vous pouvez faire: '[\ s \ S]'. –

0

Votre regex spécifique (avec des sauts de ligne) peut être associé à \/\*\*[\d\D]*?\*\/ Un effet secondaire de \D est qu'il correspond à des sauts de ligne et peut être utilisé de cette manière.

En Perl, vous pouvez également utiliser Regexp::Common pour trouver toute une variété de commentaires de code source.

On a déjà mentionné quelques-uns des meilleurs liens (livre de Friedl et http://www.regular-expressions.info/)

Mes sites web pour regex sont les suivants:

  1. Perl perlre tutorial. La meilleure introduction à l'expression rationnelle de Perl.
  2. Perl perlre documentation regex Perl
  3. Perl perlre quick reference Le guide de démarrage rapide
  4. Regular Expressions, A Favorite Parsetime
  5. Pattern Matching, Regular Expressions and Parsing Tutorials à PerlMonks
  6. Explain Regex
  7. RegExr Expression régulière en ligne Tester
  8. Regular Expression Library
  9. Regex Powertoy testeur en ligne
  10. BRE and ERE de référence
  11. Larry Wall de Apocalypse 5: Pattern Matching