2015-08-19 24 views
5

Tôi có dữ liệu phù hợp với mẫu này: (x|y). xy có thể là số âm và trong trường hợp này, biển hiệu - có sẵn. Tôi đang cố gắng tạo biểu thức chính quy cho phù hợp với x và y.Regex X/Y tọa độ

Dưới đây là biểu hiện hiện tại của tôi, mà dường như có giá trị đối với tôi nhưng không hoạt động:

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

Dưới đây là các dữ liệu thô:

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

Bất kỳ ý tưởng?

+3

Có vẻ ổn. Điều gì là sai với nó? – ndn

Trả lời

4

Bạn có một số ký tự Unicode ẩn trong dữ liệu thử nghiệm của mình.

Xóa chúng và regex của bạn sẽ work just fine.

Ví dụ: ví dụ của bạn về (-112|‭‭-522‬‬) thực ra là \u0028\u002d\u0031\u0031\u0032\u007c\u202d\u202d\u002d\u0035\u0032\u0032\u202c\u202c\u0029.

Bạn có một vài U+202D (LEFT sang phải ghi đè lên) và U+202C (Định dạng hướng pop) trong đó.

Nếu bạn muốn cho phép những trong regex của bạn, bạn có thể bao gồm họ:

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

Nhưng mô hình được khá lộn xộn. Tôi vừa thêm một bó số \p{Cf}* vào đó để cho phép các ký tự này. Lưu ý rằng bạn vẫn sẽ phải loại bỏ các ký tự giữa dấu trừ và các chữ số trước khi bạn cố chuyển đổi các phần tử đã bắt thành số nguyên.

Có thể sẽ đơn giản hơn nhiều khi chỉ thay thế mọi thứ phù hợp với \p{Cf}+ bằng chuỗi trống trước khi tiếp tục với mẫu gốc của bạn.

+0

làm thế nào tôi có thể loại bỏ các ký tự unicode trong php? – BadTigrou

+0

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

+0

Thực hiện tốt. <°))))))))))))> –

-3

Bạn phải thoát dấu trừ bằng dấu gạch chéo ngược như thế này \-. Nó dành riêng cho các mẫu như a-z

+4

Không có lớp nhân vật ở đây..so '-' không được bảo lưu. – chris85

+0

Đây là một chủ đề trên đó. http://stackoverflow.com/questions/9589074/regex-should-hyphens-be-escaped Tôi muốn xóa câu trả lời này. – chris85

+0

Cảm ơn bạn đã thông tin đó :) – Karl

0

Bạn có thể kiểm tra điều này trong Regexr, đó là nơi tôi đến với nó, nhưng điều này nên làm những gì bạn đang tìm kiếm các mã

Regex

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

giá trị Tested

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

Ya biết, tôi không nghĩ về điều đó, tôi sẽ sửa chữa nó. Đối với g, tôi đã nói tôi đã sử dụng regexer, vì vậy tôi chỉ sao chép đầu ra của nó từ tùy chọn chia sẻ.Tôi cũng sẽ khắc phục điều đó quá – Pazuzu156

+0

Câu trả lời đã được chỉnh sửa để xóa cờ g và cố định nhiều số thập phân. – Pazuzu156

Các vấn đề liên quan