正则表达式X / Y坐标

时间:2015-08-19 21:20:47

标签: php regex coordinate

我有符合此模式的数据:(x|y)xy可能是否定的,在这种情况下会出现符号-。 我正在尝试构建一个正则表达式来匹配x和y。

这是我目前的表达方式,这对我来说似乎有效但不起作用:

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

以下是原始数据:

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

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

您的测试数据中有一些不可见的Unicode字符。

删除它们,你的正则表达式将work just fine

例如,(-112|‭‭-522‬‬)的示例实际上是\u0028\u002d\u0031\u0031\u0032\u007c\u202d\u202d\u002d\u0035\u0032\u0032\u202c\u202c\u0029

您有几个U+202D LEFT-TO-RIGHT OVERRIDE )和U+202C POP DIRECTIONAL FORMATTING )。

如果你想在你的正则表达式中允许这些,你可以包括它们:

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

但这种模式变得相当混乱。我刚刚在那里添加了一堆\p{Cf}*来允许这些字符。请注意,在尝试将捕获的子字符串转换为整数之前,您仍需要删除减号和数字之间的字符。

在继续使用原始模式之前,用空字符串替换匹配\p{Cf}+的所有内容可能要简单得多。

答案 1 :(得分:0)

你可以在Regexr中进行测试,这是我想出来的地方,但是这应该是你正在寻找的

正则表达式代码

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

经测试的值

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

答案 2 :(得分:-3)

您必须使用类似此\-的反斜杠来转义减号。它保留给a-z

等模式