2012-03-29 14 views
8
http://www.regular-expressions.info के अनुसार

,RegEx के अंदर अभिव्यक्ति X मिलान क्या होता है?

आप \X विचार कर सकते हैं regex इंजन है कि सादे ASCII का उपयोग में डॉट के यूनिकोड संस्करण।

इसका मतलब यह है कि यह किसी भी संभव Unicode कोड बिंदु से मेल खाएगी?

उत्तर

6

साइट का वर्णन बहुत अच्छी है:

\ एक्स एक भी यूनिकोड ग्रफीम मेल, चाहे एक भी कोड बिंदु या संयोजन के निशान का उपयोग कर कई कोड अंक के रूप में एन्कोड। एक ग्रैफेम "चरित्र" की हर रोज़ अवधारणा जैसा दिखता है। \ एक्स मैचों में एक, के रूप में U + 0061 U + 0300 इनकोडिंग à रूप में U + 00E0 इनकोडिंग, ©, आदि

तो, बात यह यूनिकोड-अवगत है कि बनाता है कि यह कई कोड अंक से मिलान कर सकते है जब वे एक दृश्यमान "चीज" (grapheme) से गठबंधन करते हैं।

अधिक जानकारी के लिए Wikipedia's page on Combining Characters देखें, उदाहरण के लिए ऊपर उल्लिखित यू + 0300 कोडपॉइंट सूचीबद्ध है।

2

Perl regex manual से:

यह एक यूनिकोड ग्रफीम क्लस्टर बढ़ाया मेल खाता है।

\X काफी से मेल खाता है जो सामान्य (गैर-यूनिकोड-प्रोग्रामर) उपयोग एकल वर्ण पर विचार करेगा। उदाहरण के तौर पर, किसी प्रकार के डायक्रिटिक चिह्न, जैसे तीर के साथ एक जी पर विचार करें। यूनिकोड में ऐसा कोई एकल वर्ण नहीं है, लेकिन एक जी का उपयोग करके एक यूनिकोड "कोबिनिंग अपवर्ड्स एरोव बेलो" के बाद उपयोग किया जा सकता है, और यूनिकोड-जागरूक सॉफ़्टवेयर द्वारा प्रदर्शित किया जाएगा जैसे कि यह एक ही चरित्र था।

स्मारक: एक्स्टेंडेड यूनिकोड चरित्र।

और PCRE man pages (2012) से:

PCRE पर्ल से \ एक्स का एक सरल संस्करण है, जो \ एक्स मैच क्या यूनिकोड एक "विस्तारित ग्रफीम क्लस्टर" कॉल करने के लिए बदल लागू करता है। यह एक विस्तारित यूनिकोड अनुक्रम की तुलना में अधिक जटिल है, जो है जो पीसीआरई मेल खाता है।

[...]

\ एक्स एक विस्तारित यूनिकोड अनुक्रम

[...]

\ एक्स भागने कि एक विस्तारित फार्म यूनिकोड वर्ण के किसी भी संख्या से मेल खाता है यूनिकोड अनुक्रम।\ एक्स

(?>\PM\pM*) 

है कि के बराबर है, यह "निशान" संपत्ति के बिना एक चरित्र, एक परमाणु समूह के रूप में व्यवहार करता है अनुक्रम "निशान" संपत्ति के साथ शून्य या अधिक अक्षर, और (के बाद से मेल खाता है निचे देखो)। के साथ वर्ण "चिह्न" संपत्ति आम तौर पर उच्चारण होते हैं जो पूर्ववर्ती वर्ण को प्रभावित करते हैं। उनमें से कोई भी 256 से कम कोडपॉइंट नहीं है, इसलिए 8-बिट गैर-यूटीएफ -8 मोड \ एक्स किसी भी एक चरित्र से मेल खाता है।

ध्यान दें कि पर्ल के हाल के संस्करणों ने से मेल खाने के लिए \ X को बदल दिया है, यूनिकोड एक "विस्तारित ग्रैफेम क्लस्टर" कहता है, जिसमें जटिल परिभाषा है।

PCRE man pages के बाद संस्करण (2015):

विस्तारित ग्रफीम समूहों

\X भागने यूनिकोड वर्ण कि फार्म एक "विस्तारित ग्रफीम क्लस्टर" के किसी भी संख्या से मेल खाता है, और अनुक्रम व्यवहार करता है एक परमाणु समूह (नीचे देखें) के रूप में। करने के लिए और रिहाई 8.31 सहित ऊपर, PCRE मिलान किया एक ear- lier, सरल परिभाषा है कि

(?>\PM\pM*) 

यही कारण है, यह "निशान" संपत्ति के बिना एक चरित्र का मिलान नहीं हुआ के बराबर था, साथ शून्य या अधिक वर्ण के बाद "निशान" संपत्ति। "चिह्न" संपत्ति वाले वर्ण आम तौर पर गैर-दूरी उच्चारण हैं जो पिछले वर्ण को प्रभावित करते हैं।

यह सरल परिभाषा यूनिकोड में बढ़ा दी गई हर किरदार एक ग्रफीम तोड़ने संपत्ति दे रही है, और नियमों है कि इन गुणों का उपयोग बढ़ाया ग्रफीम समूहों की सीमाओं को परिभाषित करने के बनाने के द्वारा समग्र चरित्र के अधिक compli- लिखे प्रकार शामिल करने के लिए। 8.31 के बाद पीसीआरई के रिलीज में, \X इन क्लस्टर में में से एक से मेल खाता है।

\X हमेशा कम से कम एक चरित्र से मेल खाता है। तो फिर यह एक क्लस्टर समाप्त होने के लिए निम्नलिखित नियमों के अनुसार अतिरिक्त वर्ण जोड़ने के लिए फैसला: विषय स्ट्रिंग के अंत में

  1. अंत।

  2. सीआर और एलएफ के बीच खत्म न करें; अन्यथा किसी भी नियंत्रण चार कलाकार के बाद खत्म होता है।

  3. हंगुल (कोरियाई स्क्रिप्ट) अक्षरों के अनुक्रमों को तोड़ें मत। हंगुल पात्र पांच प्रकार के होते हैं: एल, वी, टी, एलवी, और एलवीटी। एक एल चरित्र एल, वी, एलवी, या एलवीटी चरित्र के बाद किया जा सकता है; एक एलवी या वी चरित्र के बाद वी या टी चरित्र का अनुसरण किया जा सकता है; एक एलवीटी या टी चरित्र केवल टी चरित्र द्वारा अनुपालन किया जा सकता है।

  4. वर्ण या अंतर अंक को विस्तारित करने से पहले समाप्त न करें। "चिह्न" संपत्ति वाले अक्षरों में हमेशा "विस्तार" ग्रैफेम ब्रेकिंग प्रॉपर्टी होती है।

  5. प्रीपेड वर्णों के बाद समाप्त न करें।

  6. अन्यथा, क्लस्टर समाप्त करें।

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