Regex niet-operator

Is er een niet-operator in RGEXES?
Zoals in die tekenreeks: "(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)"

Ik wil alle \([0-9a-zA-z _\.\-:]*\), maar niet degene waar het een jaar is: (2001).

Dus wat de regex moet terugkeren moet zijn: (2001) name.

Opmerking: zoiets als \((?![\d]){4}[0-9a-zA-z _\.\-:]*\)werkt niet voor mij (De (20019)op de een of andere manier overeenkomt met …)


Antwoord 1, Autoriteit 100%

Nee, er is geen directe exploitant. Op zijn minst niet zoals je hoopt.

U kunt een negatieve lookaHead van een zero-breedte gebruiken, echter:

\((?!2001)[0-9a-zA-z _\.\-:]*\)

De (?!...)DEEL betekent “alleen overeenkomen als de tekst volgende (vandaar: lookahead) deze niet (Vandaar: negatief) match dit. Maar het is niet echt Consume de tekens die het overeenkomt (vandaar: nul-breedte).

Er zijn eigenlijk 4 combinaties van lookarounds met 2 assen:

  • Lookbehind / Lookahead: specificeert als de tekens vóór of na het punt worden beschouwd als
  • Positief / negatief: Geeft aan of de personages MOET MATCH of MOET MET NIET MOETEN MOETEN MOETEN.

Antwoord 2, Autoriteit 162%

Niet helemaal, hoewel u in het algemeen een werkverlening kunt gebruiken op een van de formulieren

  • [^abc], die karakter is door teken niet aof bof c,
  • of negatieve lookahead: a(?!b), die aniet wordt gevolgd door b
  • of negatieve lookbehind: (?<!a)b, dat is bniet voorafgegaan door a

Antwoord 3

Je zou het (2001)-gedeelte kunnen vastleggen en de rest door niets kunnen vervangen.

public static string extractYearString(string input) {
    return input.replaceAll(".*\(([0-9]{4})\).*", "$1");
}
var subject = "(2001) (asdf) (dasd1123_asd 21.01.2011 zqge)(dzqge) name (20019)";
var result = extractYearString(subject);
System.out.println(result); // <-- "2001"

.*\(([0-9]{4})\).*betekent

  • .*komt overal overeen
  • \(komt overeen met een (teken
  • (begin met vastleggen
  • [0-9]{4}vier keer een enkel cijfer
  • )einde opname
  • \)komt overeen met een )teken
  • .*alles (rest van de tekenreeks)

Other episodes