Regular Expressions
एंकर वर्ण: कैरेट (^)
खोज…
टिप्पणियों
शब्दावली
कैरेट (^) चरित्र को निम्नलिखित शब्दों द्वारा भी संदर्भित किया जाता है:
- टोपी
- नियंत्रण
- ऊपर की ओर तीर
- शहतीर
- परिधि उच्चारण
प्रयोग
नियमित अभिव्यक्ति में इसके दो उपयोग हैं:
- रेखा की शुरुआत को निरूपित करने के लिए
- यदि एक वर्ग कोष्ठक (
[^
) के तुरंत बाद उपयोग किया जाता है, तो यह अनुमत वर्णों के सेट को नकारने का कार्य करता है (अर्थात[123]
अर्थ है वर्ण 1, 2, या 3 की अनुमति है, जबकि कथन[^123]
अर्थ है 1 के अलावा कोई भी वर्ण , 2, या 3 की अनुमति है।
चरित्र पलायन
विशेष अर्थ के बिना एक कैरेट को व्यक्त करने के लिए, इसे बैकस्लैश के साथ पहले से बच जाना चाहिए; यानी \^
।
लाइन की शुरुआत
जब मल्टी-लाइन (?m)
संशोधक बंद हो जाता है , ^
केवल इनपुट स्ट्रिंग की शुरुआत से मेल खाता है:
रेगेक्स के लिए
^He
निम्नलिखित इनपुट तार मेल खाते हैं:
-
Hedgehog\nFirst line\nLast line
-
Help me, please
-
He
और निम्नलिखित इनपुट तार मेल नहीं खाते:
-
First line\nHedgehog\nLast line
-
IHedgehog
-
Hedgehog
(श्वेत-रिक्त स्थान के कारण)
जब मल्टी-लाइन (?m)
संशोधक चालू होता है , ^
हर लाइन की शुरुआत से मेल खाता है:
^He
उपरोक्त किसी भी इनपुट स्ट्रिंग से मेल खाता है जिसमें He
साथ शुरू होने वाली एक पंक्ति है।
नई पंक्ति वर्ण के रूप में \n
को ध्यान में रखते हुए, निम्न पंक्तियाँ मेल खाती हैं:
-
Hello
-
First line\nHedgehog\nLast line
(दूसरी पंक्ति केवल) -
My\nText\nIs\nHere
(केवल अंतिम पंक्ति)
और निम्नलिखित इनपुट तार मेल नहीं खाते:
-
Camden Hells Brewery
-
Helmet
(सफेद रिक्त स्थान के कारण))
^
का उपयोग करके खाली लाइनों का मिलान करना
कैरेट के लिए एक और विशिष्ट उपयोग का मामला रिक्त लाइनों (या मल्टी-लाइन संशोधक बंद होने पर एक रिक्त स्ट्रिंग) से मेल खाता है।
खाली लाइन (मल्टी-लाइन ऑन ) से मिलान करने के लिए, एक कैरेट का उपयोग $
बगल में किया जाता है, जो लाइन के अंत में स्थिति का प्रतिनिधित्व करने वाला एक और एंकर वर्ण होता है ( एंकर कैरेक्टर: डॉलर ($) )। इसलिए, निम्न नियमित अभिव्यक्ति एक खाली रेखा से मेल खाएगी:
^$
कैरेट चरित्र से बचना
यदि आपको वर्ण वर्ग ( वर्ण वर्ग ) में ^
वर्ण का उपयोग करने की आवश्यकता है, तो इसे कक्षा की शुरुआत के अलावा कहीं और रखें:
[12^3]
या ^
किसी बैकस्लैश \
^
का उपयोग करके बच जाएं:
[\^123]
यदि आप कैरेट चरित्र को एक चरित्र वर्ग के बाहर मैच करना चाहते हैं, तो आपको इससे बचने की आवश्यकता है:
\^
यह ^
को स्ट्रिंग / लाइन की शुरुआत का प्रतिनिधित्व करने वाले एंकर चरित्र के रूप में व्याख्या करने से रोकता है।
लाइन एंकर की तुलना और स्ट्रिंग एंकर की शुरुआत
जबकि कई लोग सोचते हैं कि ^
एक स्ट्रिंग की शुरुआत का मतलब है , इसका मतलब वास्तव में एक लाइन की शुरुआत है। स्ट्रिंग एंकर उपयोग की वास्तविक शुरुआत के लिए, \A
A।
स्ट्रिंग hello\nworld
(या अधिक स्पष्ट रूप से)
hello
world
नियमित अभिव्यक्तियों ^h
, ^w
और \Ah
से मिलान किया जाएगा, लेकिन \Aw
द्वारा नहीं
मल्टीलाइन मॉडिफायर
डिफ़ॉल्ट रूप से, कैरेट ^
मेटाचैकर स्ट्रिंग में पहले चरित्र से पहले स्थिति से मेल खाता है।
निम्नलिखित प्रतिमानों के विरुद्ध लागू स्ट्रिंग " वर्णानुक्रम " को देखते हुए: /^char/
& /^sequence/
, इंजन निम्नानुसार मिलान करने का प्रयास करेगा:
/^char/
- ^ -
charsequence
- सी -
c
कठोरता - h -
ch
परिणाम - ए -
cha
परिणाम - आर -
char
अनुक्रम
मेल मिल गया
- ^ -
/^sequence/
- ^ -
charsequence
- s -
charsequence
मैच नहीं मिला
- ^ -
समान व्यवहार लागू किया जाएगा भले ही स्ट्रिंग में लाइन टर्मिनेटर हों , जैसे \r?\n
केवल स्ट्रिंग की शुरुआत में स्थिति का मिलान किया जाएगा।
उदाहरण के लिए:
/^/g
┊char \ r \ n
\ R \ n
अनुक्रम
हालाँकि, यदि आपको हर लाइन टर्मिनेटर के बाद मिलान करने की आवश्यकता है, तो आपको अपने पैटर्न के भीतर मल्टीलाइन मोड ( //m
, (?m)
) सेट करना होगा। ऐसा करने से, कैरेट ^
"प्रत्येक पंक्ति की शुरुआत" से मेल खाएगा, जो कि स्ट्रिंग की शुरुआत में स्थिति और 1 लाइन टर्मिनेटर के तुरंत बाद की स्थिति से मेल खाती है।
1 कुछ प्रकारों में (जावा, PCRE, ...), ^
लाइन टर्मिनेटर के बाद, से मेल नहीं खाएगी अगर लाइन टर्मिनेटर स्ट्रिंग में पिछले है।
उदाहरण के लिए:
/^/gm
┊char \ r \ n
┊ \ r \ n
┊sequence
कुछ नियमित अभिव्यक्ति इंजन जो मल्टीलाइन संशोधक का समर्थन करते हैं:
Pattern pattern = Pattern.compile("(?m)^abc"); Pattern pattern = Pattern.compile("^abc", Pattern.MULTILINE);
var abcRegex = new Regex("(?m)^abc"); var abdRegex = new Regex("^abc", RegexOptions.Multiline)
/(?m)^abc/ /^abc/m
अजगर 2 और 3 (बिल्ट-इन
re
मॉड्यूल)abc_regex = re.compile("(?m)^abc"); abc_regex = re.compile("^abc", re.MULTILINE);