/ / Perl regex: Ako skombinujem tieto 2 výrazy regex? [zatvorené] - regex, perl, selektor

Perl regex: Ako môžem kombinovať tieto 2 výrazy regexu? [zatvorené] - regex, perl, selektor

Snažím sa napísať selektor, ktorý odfiltruje / odstráni všetko po symbole komentára (#), ale ignoruje # symboly v reťazcoch ("" alebo "")

Takže v nižšie uvedenom príklade by bol filtrovaný / odstránený iba posledný riadok

"#dummy comment" asd asd
" abc # dummy comment"
abc #real comment

Toto sú dva výbery regulárnych výrazov, s ktorými som doteraz prišiel (neskôr pridám s / tag):

/("|").*#.*("|")/g        --> selects fake commnts

/#(?!!).+/g   ---> highlights all comments, including above ones (?!! is to ignore #!/usr/bin/env perl )

Momentálne sa snažím pripojiť k týmto dvomkomentáre na dosiahnutie vyššie uvedeného výsledku. Snažil som sa používať vyhľadávanie vpred a vzad, ale zdá sa, že sa to nedarí. Všetky rady by sa veľmi ocenili.

odpovede:

2 pre odpoveď č. 1

A čo táto jednoduchá metóda?

  1. najskôr odstráňte všetky podreťazce medzi dvojitými alebo jednoduchými úvodzovkami
  2. extrahovať podreťazec po a # jednoduchým regulárnym výrazom cpature

Tu je skúšobný program pre zadanie vzorky:

#!/usr/bin/perl

use strict;
use warnings;

while (<DATA>) {
chomp;
s/[""][^""]*[""]//g;
if (m/#(.*)/) {
print "$1n";
}
}

__DATA__
"#dummy comment" asd asd
" abc # dummy comment"
abc #real comment