2015-08-19 75 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