Php 正则表达式X/Y坐标

Php 正则表达式X/Y坐标,php,regex,coordinate,Php,Regex,Coordinate,我有符合这种模式的数据:(x | y)x和y可以是负数,在这种情况下,符号-出现。 我试图构建一个正则表达式来匹配x和y 以下是我当前的表达,对我来说似乎有效,但不起作用: /\((-?\d+)\|(-?\d+)\)/ 以下是原始数据: ‭(-112|‭‭-522‬‬) ‭(-112|‭‭522‬‬) (112|-‭‭522‬‬) (112|‭‭522‬‬) 有什么想法吗?你必须用反斜杠来避开负号,就像这样\-。它是为像a-z这样的模式保留的。您的测试数据中有一些不可见的Unicode字符

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

以下是我当前的表达,对我来说似乎有效,但不起作用:

/\((-?\d+)\|(-?\d+)\)/
以下是原始数据:

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

有什么想法吗?

你必须用反斜杠来避开负号,就像这样
\-
。它是为像
a-z

这样的模式保留的。您的测试数据中有一些不可见的Unicode字符

删除它们,您的正则表达式将被删除

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

这里有一些
U+202D
(从左到右的覆盖)和
U+202C
(弹出方向格式)

如果要在正则表达式中允许这些,可以包括:

\(\p{Cf}*(?\p{Cf}*\d+)\p{Cf}*\\124;\ p{Cf}*(?\p{Cf}*\d+)\p{Cf}*\)
但是模式变得非常混乱。我只是在其中添加了一堆
\p{Cf}*
,以允许使用这些字符。请注意,在尝试将捕获的子字符串转换为整数之前,您仍然必须清除减号和数字之间的字符


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

您可以在Regexr中测试这一点,这是我提出它的地方,但这应该满足您的要求

正则表达式代码

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

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

它看起来很好。有什么问题吗?这里没有字符类。所以
-
不是保留的。这里有一个线程。我会删除这个答案。你知道,我没有想到,我会修复它。至于g,我声明我使用了regexer,所以我只是从共享选项复制了它的输出。我会修复tooAnswer已经被编辑以删除g标志并修复了多个小数点的问题。@BadTigrou
$text=preg_replace('/\p{Cf}+/','','$text);