2015-08-19 32 views
5

Ich habe Daten, die diesem Muster entsprechen: (x|y). x und y können negativ sein, und in diesem Fall ist das Zeichen - vorhanden. Ich versuche einen Regex-Ausdruck zu erstellen, der mit x und y übereinstimmt.Regex X/Y-Koordinate

Hier ist meine aktuelle Ausdruck, der mir gültig scheint aber nicht funktioniert:

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

Hier ist die Rohdaten:

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

Irgendwelche Ideen?

+3

Es sieht gut aus. Was ist daran falsch? – ndn

Antwort

4

reserviert Sie haben einige unsichtbare Unicode-Zeichen in Ihren Testdaten.

Entfernen Sie sie, und Ihre Regex wird work just fine.

Zum Beispiel ist Ihr Beispiel (-112|‭‭-522‬‬) eigentlich \u0028\u002d\u0031\u0031\u0032\u007c\u202d\u202d\u002d\u0035\u0032\u0032\u202c\u202c\u0029.

Sie haben ein paar U+202D (von links nach rechts KORREKTUR) und U+202C (POP DIREKTIONALE FORMATIERUNG) dort.

Wenn Sie diese in Ihrem regex zulassen möchten, könnten Sie ihnen gehören:

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

Aber das Muster wird ziemlich chaotisch. Ich habe gerade ein paar \p{Cf}* hinzugefügt, um diese Zeichen zu ermöglichen. Beachten Sie, dass Sie immer noch die Zeichen zwischen dem Minuszeichen und den Ziffern loswerden müssen, bevor Sie versuchen, die erfassten Teilzeichenfolgen in Ganzzahlen umzuwandeln.

Es wäre wahrscheinlich viel einfacher, einfach alles zu ersetzen, das \p{Cf}+ mit einem leeren String entspricht, bevor Sie mit Ihrem ursprünglichen Muster fortfahren.

+0

Wie kann ich die Unicode-Zeichen in PHP entfernen? – BadTigrou

+0

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

+0

Gut gemacht. <°)))))))))))> –

-3

Sie müssen das Minuszeichen mit einem Backslash wie diesem \- entkommen lassen. Es ist für Muster wie a-z

+4

Hier gibt es keine Zeichenklasse..so '-' ist nicht reserviert. – chris85

+0

Hier ist ein Thread darauf. http://stackoverflow.com/questions/9589074/regex-should-hyphens-be-escaped Ich würde diese Antwort löschen. – chris85

+0

Vielen Dank für diese Information :) – Karl

0

Sie können dies testen in Regexr, das ist, wo ich mit ihm kam, aber das sollte tun, was Sie für

Regex Code

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

Getestete Werte

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

Ja, ich habe nicht daran gedacht, ich werde es reparieren. Was das g betrifft, habe ich angegeben, dass ich regexer verwendet habe, also habe ich einfach die Ausgabe von der Aktienoption kopiert.Ich werde das auch beheben – Pazuzu156

+0

Antwort wurde bearbeitet, um die g-Flagge zu entfernen und mehrere Dezimalstellen zu beheben. – Pazuzu156