2015-08-19 29 views
5

Ho dati che si adattano a questo modello: (x|y). x e possono essere negativi e in questo caso è presente il segno -. Sto provando a creare un'espressione regolare in modo che corrisponda a x e y.Coordinate X/Y Regex

ecco la mia espressione corrente, che sembra valida a me, ma non funziona:

/\((-?\d+)\|(-?\d+)\)/ 

Ecco i dati grezzi:

‭(-112|‭‭-522‬‬) 
‭(-112|‭‭522‬‬) 
(112|-‭‭522‬‬) 
(112|‭‭522‬‬) 

Tutte le idee?

+3

Sembra a posto. Cosa c'è che non va? – ndn

risposta

4

Hai alcuni caratteri Unicode invisibili nei dati di test.

Rimuovere loro e il tuo regex sarà work just fine.

Ad esempio, il tuo esempio di (-112|‭‭-522‬‬) è in realtà \u0028\u002d\u0031\u0031\u0032\u007c\u202d\u202d\u002d\u0035\u0032\u0032\u202c\u202c\u0029.

avete un paio di U+202D (LEFT-TO-RIGHT OVERRIDE) e U+202C (POP DIREZIONALE FORMATTING) in là.

Se si desidera consentire questi nel vostro regex, si potrebbe includerli:

\(\p{Cf}*(-?\p{Cf}*\d+)\p{Cf}*\|\p{Cf}*(-?\p{Cf}*\d+)\p{Cf}*\) 

Ma il modello diventa piuttosto disordinato. Ho appena aggiunto un gruppo di \p{Cf}* lì per consentire questi caratteri. Nota che dovrai ancora eliminare i caratteri tra il segno meno e le cifre prima di provare a convertire le sottostringhe acquisite in numeri interi.

Probabilmente sarebbe molto più semplice sostituire semplicemente tutto ciò che corrisponde a \p{Cf}+ con una stringa vuota prima di procedere ulteriormente con il modello originale.

+0

come posso rimuovere i caratteri Unicode in PHP? – BadTigrou

+0

@BadTigrou '$ text = preg_replace ('/ \ p {Cf} + /', '', $ text);' –

+0

Ben fatto. <°)))))))))))> –

-3

È necessario sfuggire al segno meno con una barra rovesciata come questa \-. È riservato a modelli come a-z

+4

Non c'è classe di caratteri qui..so '-' non è riservato. – chris85

+0

Ecco una discussione. http://stackoverflow.com/questions/9589074/regex-should-hyphens-be-escaped Vorrei eliminare questa risposta. – chris85

+0

Grazie per queste informazioni :) – Karl

0

È possibile verificare questo in RegExr, che è dove mi è venuta con esso, ma questo dovrebbe fare quello che stai cercando per il codice

Regex

/\((-?[0-9]+\.?[0-9]+)\|(-?[0-9]+\.?[0-9]+)\)/ 

valori testati

(-112|-522) 
(-112|522) 
(112.35|-522) 
(112|522.5) 
+0

Sai, non ci ho pensato, lo aggiusterò. Per quanto riguarda il g, ho dichiarato che ho usato regexer, quindi ho appena copiato il suo output dall'opzione share.Lo aggiusterò anch'io – Pazuzu156

+0

La risposta è stata modificata per rimuovere il flag g e risolto il problema con più decimali. – Pazuzu156

Problemi correlati