CHR(0)
सी प्रोग्रामिंग भाषा (दूसरों के बीच) में एक स्ट्रिंग को समाप्त करने के लिए उपयोग किया जाने वाला वर्ण है।
जब आप CHR(0)
. पास करते हैं फ़ंक्शन के लिए, यह बदले में, इसे निचले स्तर के फ़ंक्शन में पास करेगा जो आपके द्वारा पारित स्ट्रिंग को पार्स करेगा और उस स्ट्रिंग से नियमित अभिव्यक्ति पैटर्न तैयार करेगा। इस रेगुलर एक्सप्रेशन पैटर्न में CHR(0)
दिखाई देगा और सोचें कि यह स्ट्रिंग टर्मिनेटर है और बाकी पैटर्न को अनदेखा करें।
REGEXP_REPLACE
. के साथ व्यवहार को देखना आसान है :
SELECT REGEXP_REPLACE( 'abc' || CHR(0) || 'e', CHR(0), 'd' )
FROM DUAL;
जब आप इसे चलाते हैं तो क्या होता है:
CHR(0)
एक नियमित अभिव्यक्ति में संकलित किया जाता है और एक स्ट्रिंग टर्मिनेटर बन जाता है।- अब पैटर्न केवल स्ट्रिंग टर्मिनेटर है और इसलिए पैटर्न शून्य-लंबाई वाला स्ट्रिंग है।
- रेगुलर एक्सप्रेशन को फिर इनपुट स्ट्रिंग से मिलान किया जाता है और यह पहला अक्षर
a
पढ़ता है और पाता है कि शून्य-लंबाई वाली स्ट्रिंग का मिलानa
. से पहले किया जा सकता है इसलिए यहa
. से पहले मिलान किए गए कुछ भी नहीं को बदल देता है एकd
. के साथ आउटपुट दे रहा हैda
। - फिर यह
b
. को बदलने वाले अगले वर्ण के लिए दोहराएगा करने के लिएdb
। - और इसी तरह जब तक आप एंड-ऑफ-स्ट्रिंग तक नहीं पहुंच जाते जब यह शून्य-लंबाई पैटर्न से मेल खाएगा और एक अंतिम
d
जोड़ देगा ।
और आपको आउटपुट मिलेगा:
dadbdcd_ded
(जहां _ CHR(0)
है चरित्र। )
नोट:CHR(0)
इनपुट में बदला नहीं गया है।
यदि आप जिस क्लाइंट प्रोग्राम का उपयोग कर रहे हैं वह CHR(0)
. पर स्ट्रिंग को छोटा कर रहा है आप संपूर्ण आउटपुट नहीं देख सकते हैं (यह एक मुद्दा है कि आपका क्लाइंट स्ट्रिंग का प्रतिनिधित्व कैसे कर रहा है और ओरेकल के आउटपुट के साथ नहीं) लेकिन इसे DUMP()
का उपयोग करके भी दिखाया जा सकता है। :
SELECT DUMP( REGEXP_REPLACE( 'abc' || CHR(0) || 'e', CHR(0), 'd' ) )
FROM DUAL;
आउटपुट:
Typ=1 Len=11: 100,97,100,98,100,99,100,0,100,101,100
[TL;DR] तो क्या हो रहा है
REGEXP_LIKE( '1234567890', CHR(0) )
यह एक शून्य-लंबाई वाली स्ट्रिंग रेगुलर एक्सप्रेशन पैटर्न बनाएगा और यह 1
से पहले एक शून्य-लंबाई वाले मैच की तलाश करेगा। चरित्र - जिसे वह ढूंढेगा और फिर वापस लौटाएगा कि उसे एक मैच मिला है।