2015-08-19 76 views
5

我有適合此模式的數據:(x|y)xy可能是負數,並且在這種情況下標記-存在。 我想建立一個正則表達式來匹配x和y。正則表達式X/Y座標

以下是我現在的表情,這似乎是有效的,但我不工作:

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

這裏是原始數據:

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

任何想法?

+3

看起來很好。它有什麼問題? – ndn

回答

4

您的測試數據中有一些不可見的Unicode字符。

刪除它們,你的正則表達式將會是work just fine

例如,你的(-112|‭‭-522‬‬)的例子實際上是\u0028\u002d\u0031\u0031\u0032\u007c\u202d\u202d\u002d\u0035\u0032\u0032\u202c\u202c\u0029

你有幾個U+202DLEFT-TO-RIGHT OVERRIDE),並在那裏U+202CPOP方向格式)。

如果你想要讓這些在你的正則表達式,你可以包括這些:

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

但是這種模式變得相當混亂。我只是在那裏添加了一堆\p{Cf}*以允許這些字符。請注意,在嘗試將捕獲的子字符串轉換爲整數之前,您仍然必須清除減號和數字之間的字符。

在進一步處理原始模式之前,用一個空字符串替換與\p{Cf}+相匹配的所有內容可能會簡單得多。

+0

我如何刪除unicode字符在PHP? – BadTigrou

+0

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

+0

幹得好。 <))))))))))))> –

-3

您必須用這樣的反斜槓\-來避開負號。它保留用於像a-z

+4

這裏沒有字符類,所以'-'不保留。 – chris85

+0

這裏有一個線程。 http://stackoverflow.com/questions/9589074/regex-should-hyphens-be-escaped我想刪除這個答案。 – chris85

+0

謝謝你的信息:) – Karl

0

可以在Regexr,這是我給我了測試,但這應該做你要找的

正則表達式代碼

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

測試值

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

雅知道,我沒有想到,我會解決它。至於g,我說我使用了regexer,所以我只是複製了它從share選項中的輸出。我也會修復這個問題 – Pazuzu156

+0

答案已被編輯,以刪除g標誌並修復了多個小數問題。 – Pazuzu156