2010-12-13 45 views
0

J'essaie de supprimer les commentaires non judicieux avec preg-replace dans des situations de script contrôlées, mais mon regex est incorrecte. Quelqu'un d'idées quelles sont les erreurs avec mon regex? (J'ai Apache/2.0.54 & PHP/5.2.9php function preg_replace regex ne fonctionnant pas, une question de syntaxe

AVANT:

// Bla Bli Blue Blow Bell Billy Bow Bye 
script var etc(); // cangaroo cognac codified cilly celine cocktail couplet 
script http://blaa.org // you get the idea! 

APRÈS:

script var etc(); 
script http://blaa.org 

PROBLÈME: ce regex à utiliser

# when comment starts on a new line, delete this entire line 
# find [a new line] [//] [space or no space] [comment] 
$buffer = preg_replace('??', '??', $buffer); 

# when comment is halfway in script ( // comment) 
# find [not beginning of a line] [1 TAB] [//] [1 space again] [comment] 
$buffer = preg_replace('??', '??', $buffer); 

Toutes et toutes les suggestions seront évaluées +1 par moi, cuase im tellement sacrément proche de résoudre cette énigme!

+1

Avez-vous envisagé d'utiliser un tokenizer approprié au lieu d'une regex? Vous ne pourrez jeter que les jetons de commentaire. – cdhowie

+1

Qu'en est-il des commentaires sur plusieurs lignes? Surtout des commentaires multilignes imbriqués? C'est hideusement non-trivial pour regex, mais trivial pour un tokenizer/* ceci est un/* commentaire imbriqué */ –

+0

Écrire des commentaires de manière cohérente, signifie qu'il n'y a pas de place pour une chose si étrange Marc B, un commentaire dans un commentaire. Néanmoins ironique qu'une telle conférence sur la cohérence vienne de la bouche d'un programmeur très incapable, à savoir moi-même hahah! – Sam

Répondre

1

Essayez cette regex:

/(?<!http:)\/\/[^\r\n]*/ 

Soyez prudent si, tenez compte des chaînes comme:

<!-- 
// not a comment --> 

ou

/* 
// not a comment */ 

et

var s = "also // not // a // comment"; 

Et vous pouvez travailler autour de https://... et ftp://... etc.

+0

# BEAUTIFULL !!!! Ne pas avoir ces situations étranges avec des commentaires dans un commentaire donne de l'espace pour un code encore plus propre: votre regex a travaillé la première fois hors de la boîte! Je vous souhaite un bon week-end Bart! – Sam

+0

@Sam, je vous en prie. Fin de semaine? Cela prendra encore quelques jours, mais merci et bonne journée aussi! :) –