2016-02-24 4 views
5

मैं एक स्ट्रिंग से मेल खाना चाहता हूं जहां एक कैप्चरिंग समूह में संख्या एक संख्या से बराबर या अधिक हो।किसी संख्या सीमा में बैक संदर्भ का उपयोग करना संभव है?

उदाहरण:

  • 1x1 = मैच
  • 1x2 = मैच
  • 2x1 = कोई मुकाबला नहीं

मेरे मन regex इस (\d)x[\1-9] कुछ ऐसा दिखाई देगा में लेकिन यह नहीं है काम। क्या रेगेक्स का उपयोग करके इसे हासिल करना संभव है?

+3

रेगेक्स स्वाद क्या है? –

+0

मैं इसे Google एनालिटिक्स में उपयोग करने की कोशिश कर रहा हूं, मुझे यकीन नहीं है कि यह क्या स्वाद है लेकिन मुझे पीसीपीआरई – Frinsh

+2

नहीं लगता है, जीए आरई 2 का उपयोग करता है। इसका मतलब है कि इसे शुद्ध रेगेक्स के साथ करना संभव नहीं है। –

उत्तर

2

आप की खोज की है के रूप में, आप एक regex क्योंकि भीतर एक मूल्य को जोड़ नहीं कर सकते हैं:

क्योंकि चरित्र वर्गों जब regex संकलित किया गया है निर्धारित कर रहे हैं ... केवल चरित्र वर्ग regex नोड प्रकार है "कड़ी मेहनत वर्णों की कोडित सूची "जिसे रेगेक्स संकलित किया गया था (जब यह भागने के बाद नहीं था और यह पता लगाया गया कि $ 1 क्या हो सकता है) बनाया गया था।

[Source]

के बाद से चरित्र वर्गों backreferences की अनुमति नहीं देते, एक बैकस्लैश एक नंबर के बाद एक चरित्र वर्ग में पुनः प्रयोजन है:

एक बैकस्लैश दो या तीन अष्टाधारी संख्याएं आती हैं है एक ऑक्टल संख्या माना जाता है।

[Source]

यह स्पष्ट रूप से क्या आप [\1-9] द्वारा इरादा नहीं है। लेकिन चूंकि सभी पात्रों को ज्ञात होने तक चरित्र वर्ग को संकलित करने का कोई तरीका नहीं है, इसलिए हमें एक और तरीका खोजना होगा।

यदि हम इसे पूरी तरह से रेगेक्स के भीतर करना चाहते हैं तो हम सभी संभावित संयोजनों का आकलन नहीं कर सकते हैं, क्योंकि हमें पता लगाने के लिए सभी कैप्चरों को जांचना होगा। For example:

"1x2" =~ m/(?:(0)x(\d)|(1)x([1-9])|(2)x([2-9])|(3)x([3-9])|(4)x([4-9])|(5)x([5-9])|(6)x([6-9])|(7)x([7-9])|(8)x([89])|(9)x(9))/ 

में शामिल होंगे "1" $3 में और "2" $4 में है, लेकिन आप खोज करने के लिए 1 से 20 कब्जा अगर कुछ भी हर बार मिलान किया गया था खोजने के लिए होगा।


आसपास regex परिणामों पर पोस्ट प्रोसेसिंग कर एक ही रास्ता एक regex सशर्त उपयोग करने के लिए है: (?(A)X) कहाँ A एक सशर्त है और X जिसके परिणामस्वरूप कार्रवाई है।

Sadly conditionals are not supported by RE2, लेकिन हम यह प्रदर्शित करने के लिए जारी रहेगा कि यह किया जा सकता है। http://www.rexegg.com/regex-tricks.html#fail

क्या आप A के लिए उपयोग करना चाहें ?{$1 > $2}, लेकिन only Perl will allow you to use code directly in a regex है:

आप X के लिए उपयोग करने के लिए क्या चाहते हैं (*F) (या (?!) रूबी में 2 +) विफलता के लिए मजबूर किया जा सके।

m/(\d)x(\d)(?(?{$1 > $2})(?!))/ 

[Live Example]

तो आपके सवाल का जवाब है: पर्ल आप का उपयोग करने की अनुमति होगी "नहीं, तो आप इस RE2 जो Google Analytics का उपयोग साथ नहीं कर सकते, लेकिन हाँ आप कर सकते हैं यह एक पर्ल regex के साथ। "

संबंधित मुद्दे

 संबंधित मुद्दे