Come evitare espressioni regex e percorsi in stringhe a doppia virgola senza impazzire?

0

Capita spesso che dopo aver progettato il mio regexp (su regex101.com ) voglio incollarlo nel mio programma. Considera questa espressione regolare che corrisponde a numeri e stringa (ma tieni presente che questa è una domanda generale! ):

^(\"(?:[^\"]|\\")*\"|\-?[0-9]+(?:\.[0-9]+)?)$

Ho sovrapposto tutti i caratteri che devono essere preceduti da escape prima di incollarli in linguaggi che utilizzano " per le stringhe.

Inutile dire che farlo manualmente mi fa impazzire. Affronto questo problema sia al lavoro con il progetto C ++ che a casa con progetti Java e JavaScript.

Come posso gestirlo in modo efficiente?

    
posta Tomáš Zato 25.05.2016 - 13:50
fonte

1 risposta

0

Usa caratteri escape Unicode anziché letterali. Ad esempio:

  • Java

    boolean b = Pattern.matches("\u0022", '"');
    
  • JavaScript

    /\u0022/.test('"');
    
  • Perl

    '"' =~ /\N{U+0022}/;
    

Inoltre, le stringhe che vengono compilate in espressioni regolari possono utilizzare interruzioni di riga per maggiore chiarezza:

  • Java

boolean phone_mask = Pattern.matches("^[^0-9]*"/* Optional non-numeric characters */ +
                        "\+9{3}" /* Followed by a plus sign and three nines */ +
                        "\s9"    /* Followed by a space and one nine */  +
                        "\s9{3}" /* Followed by a space and three nines */ +
                        "\s9{4}" /* Followed by a space and four nines */ +
                        "$", "Phone: +999 9 999 9999");
  • JavaScript
var phone_mask = RegExp("^[^0-9]*"/* Optional non-numeric characters */ +
                        "\+9{3}" /* Followed by a plus sign and three nines */ +
                        "\s9"    /* Followed by a space and one nine */  +
                        "\s9{3}" /* Followed by a space and three nines */ +
                        "\s9{4}" /* Followed by a space and four nines */ +
                        "$").test("Phone: +999 9 999 9999");

Riferimenti

risposta data 22.09.2018 - 00:47
fonte

Leggi altre domande sui tag