2013-05-08 4 views
22

में नियमित अभिव्यक्तियों में एम्परसैंड का उपयोग क्या है दोस्तों के पास पर्ल में यह नियमित अभिव्यक्ति है जिसे मैं समझ नहीं पा रहा हूं।पर्ल

s/\w+$/($`!)$&/; 

मूल स्ट्रिंग

"huge dinosaur" 

था कि नियमित अभिव्यक्ति के बाद मार डाला जाता है, स्ट्रिंग है:

"huge (huge !)dinosaur" 

मैं काफी समझते हैं कि कैसे हुआ नहीं है। और मुझे समझ में नहीं आता कि एम्पर्सेंड क्या कर रहा है। मैं $ `को समझता हूं, लेकिन यह क्यों है कि यह है कि मुझे पता है कि $ 'मैच से पहले मूल्य लेता है, जो मुझे कुछ भी नहीं लगता है क्योंकि ऊपर की नियमित अभिव्यक्ति से पहले कोई मिलान अभिव्यक्ति नहीं है।

अगर कोई मुझे पर्ल पर नियमित अभिव्यक्तियों पर कुछ बहुत उपयोगी ट्यूटोरियल से जोड़ सकता है तो वास्तव में सराहना की जाती है।

धन्यवाद

संपादित करें:

: अब मैं क्या एम्परसेंड मतलब है, यह मैच और $ बचाता है समझ में `मैच से पहले मूल्य की बचत होती है, अब मैं क्या न फिर से समझ में इस पूरे हिस्सा है
($`!)$& 

कैसे किया इस हिस्से

बन
(huge !) 
+1

Google 'perlvar' और फिर' $ & 'के लिए एक खोज करें। यह एक मोटा शुरू है। – squiguy

+0

एस /// के दूसरे भाग में बिट सिर्फ एक डबल उद्धृत स्ट्रिंग है। –

+0

@squiguy इस (http://perldoc.perl.org/perlvar.html#%24%26 –

उत्तर

25

आप सही हैं, $` एक विशेष चर जो मैच से पहले सामग्री रखती है। $& समान है, लेकिन मिलान किया गया है और $' है जो मैच के बाद था।

"huge dinosaur", /\w+$/ मैचों dinosaur से मेल खाता है। तो चर सामग्री हैं:

$` => "huge " 
$& => "dinosaur" 
$' => "" 

ध्यान दें कि क्या मिलान किया गया था dinosaur है। फिर यह dinosaur स्ट्रिंग के भाग को खोलने वाले माता-पिता, "huge ", विस्मयादिबोधक चिह्न, बंद करने वाले माता-पिता और अंत में dinosaur (मिलान किया गया था) के साथ बदल रहा है।

perlvar और perlre के लिए पर्ल दस्तावेज़ देखें।

+1

धन्यवाद आपने इसे मेरे लिए साफ़ कर दिया है। – ruggedbuteducated

+0

पैडेंटिक होने के लिए खेद है, लेकिन मुझे यह देखने में डर था कि '$ \' 'दो स्थानों के साथ समाप्त नहीं होता है। क्या यह एक गलती है या क्या मुझे कुछ याद आ रही है? –

+0

@StevenLu मेरी गलती, मूल वाक्यांश में स्थान दो बार टाइप किया, क्षमा करें! और ध्यान देने के लिए धन्यवाद – sidyll

16

$& (डॉलर एम्परसेंड) पूरे रखती है रेगेक्स मैच

$' (डॉलर के बाद एक एस्ट्रोफ़े या एकल उद्धरण) रेजेक्स मैच के बाद (दाईं ओर) स्ट्रिंग का हिस्सा रखता है।

$` (डॉलर बैकटिक) रेगेक्स मैच से पहले (बाईं ओर) स्ट्रिंग का हिस्सा रखता है।

अधिक जानकारी के लिए, कृपया परामर्श http://www.regular-expressions.info/perl.html

+1

मुझे पता चला कि कोडपैन में बैकटिक कैसे शामिल किया जाए और अपने उत्तर को संपादित करने की स्वतंत्रता ली, मुझे उम्मीद है कि आपको कोई फर्क नहीं पड़ता। आपको डबल बैकटिक्स के साथ कोडपैन शुरू करना और समाप्त करना होगा, और समापन से पहले चरित्र के बैकटिक को अलग करने के लिए बंद करने से पहले एक स्थान छोड़ना होगा ... भ्रमित! – sidyll

+0

हाँ, मुझे यकीन नहीं था कि यह कैसे करें। धन्यवाद! –