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);