2015-08-19 9 views
5

मेरे पास यह पैटर्न है जो इस पैटर्न को फिट करता है: (x|y)x और y नकारात्मक हो सकते हैं, और इस मामले में साइन - मौजूद है। मैं एक्स और वाई से मेल खाने के लिए एक रेगेक्स अभिव्यक्ति बनाने की कोशिश कर रहा हूं।रेगेक्स एक्स/वाई समन्वय

यहाँ मेरे वर्तमान अभिव्यक्ति, जो मेरे लिए वैध लगता है, लेकिन काम नहीं कर रहा है:

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

कोई भी विचार:

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

यहाँ कच्चे डेटा है?

+3

यह ठीक दिखता है। इसमें ग़लत क्या है? – ndn

उत्तर

4

पैटर्न के लिए आरक्षित है आपके पास आपके परीक्षण डेटा में कुछ अदृश्य यूनिकोड वर्ण हैं।

उन्हें हटाएं, और आपका रेगेक्स work just fine होगा।

उदाहरण के लिए, (-112|‭‭-522‬‬) का आपका उदाहरण वास्तव में \u0028\u002d\u0031\u0031\u0032\u007c\u202d\u202d\u002d\u0035\u0032\u0032\u202c\u202c\u0029 है।

आपके पास कुछ U+202D (बाएँ-से-दाएं ओवरराइड) और U+202C वहाँ में (पॉप डायरेक्शनल प्रारूपण)।

आप अपने regex में इन अनुमति देना चाहते हैं, तो आप उन्हें शामिल हो सकते हैं:

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

लेकिन पैटर्न बहुत गंदा हो जाता है। मैंने इन पात्रों को अनुमति देने के लिए बस \p{Cf}* का एक गुच्छा जोड़ा। ध्यान दें कि कैप्चर किए गए सबस्ट्रिंग्स को पूर्णांक में कनवर्ट करने का प्रयास करने से पहले आपको अभी भी शून्य चिह्न और अंकों के बीच वर्णों से छुटकारा पाना होगा।

शायद आपके मूल पैटर्न के साथ आगे बढ़ने से पहले \p{Cf}+ से मेल खाने वाली सभी चीज़ों को प्रतिस्थापित करने के लिए यह बहुत आसान होगा।

+0

मैं phic में यूनिकोड वर्णों को कैसे हटा सकता हूं? – BadTigrou

+0

@BadTigrou '$ text = preg_replace ('/ \ p {सीएफ} + /', '', $ टेक्स्ट);' –

+0

ठीक है। <°)))))))))))> –

-3

आपको \- जैसे बैकस्लैश के साथ ऋण चिह्न से बचना होगा। यह a-z

+4

यहां कोई चरित्र वर्ग नहीं है .. इसलिए '-' आरक्षित नहीं है। – chris85

+0

यहां पर एक धागा है। http://stackoverflow.com/questions/9589074/regex-should-hyphens-be- बच निकला मैं इस जवाब को हटा दूंगा। – chris85

+0

उस जानकारी के लिए धन्यवाद :) – Karl

0

आप Regexr है, जो जहां मैं इसे के साथ आया था इस परीक्षण कर सकते हैं, लेकिन यह आप

Regex कोड जो खोज रहे हैं

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

परीक्षण मूल्यों

(-112|-522) 
(-112|522) 
(112.35|-522) 
(112|522.5) 
करना चाहिए
+0

हां पता है, मैंने इसके बारे में नहीं सोचा था, मैं इसे ठीक कर दूंगा। जी के लिए, मैंने कहा कि मैंने regexer का उपयोग किया है, इसलिए मैंने शेयर विकल्प से इसकी आउटपुट कॉपी की है।मैं इसे भी ठीक कर दूंगा – Pazuzu156

+0

उत्तर को ध्वज को हटाने और कई दशमलव समस्या को ठीक करने के लिए संपादित किया गया है। – Pazuzu156