मान लीजिए कि मैं स्ट्रिंग है मैं एक नियमित अभिव्यक्ति के साथ "धीमी गति से भूरी लोमड़ी ऊर्जावान कुत्ते पर कूदता है" करने के लिए इसे बदल सकते हैं "जल्दी भूरी लोमड़ी आलसी कुत्ते पर कूदता है" चलो? वर्तमान में, मैं इस स्थिति के लिए नियमित अभिव्यक्तियों के दो सेट का उपयोग करता हूं। (इस मामले में, मैं s/quick/slow/
का उपयोग करता हूं जिसके बाद s/lazy/energetic/
है।)मैं विम या पर्ल में एक भी नियमित अभिव्यक्ति में एक से अधिक आइटम स्थानापन्न कर सकते हैं?
उत्तर
प्रतिस्थापन का दूसरा भाग एक डबल उद्धृत स्ट्रिंग है, इसलिए कोई भी सामान्य इंटरपोलेशन हो सकता है। इसका मतलब है आप एक हैश में सूचकांक को कब्जा के मूल्य का उपयोग कर सकते हैं:
#!/usr/bin/perl
use strict;
use warnings;
my %replace = (
quick => "slow",
lazy => "energetic",
);
my $regex = join "|", keys %replace;
$regex = qr/$regex/;
my $s = "The quick brown fox jumps over the lazy dog";
$s =~ s/($regex)/$replace{$1}/g;
print "$s\n";
आप निम्न कार्य कर सकते हैं।
:%s/quick\(.*\)lazy/slow\1energetic
चाल दो शब्दों के बीच पाठ से मेल खाने के लिए अभिभावकों का उपयोग करना है। इसके बाद आप \1
का उपयोग करके प्रतिस्थापन स्ट्रिंग में इस पाठ को संदर्भित कर सकते। आप दूसरे मिलान किए गए अभिभावक अभिव्यक्ति के लिए \2
का भी उपयोग कर सकते हैं। यह आपको टेक्स्ट के बीच पाठ को परेशान किए बिना एकाधिक शब्दों को प्रतिस्थापित करने की अनुमति देता है।
क्या होगा अगर ऐसे त्वरित और आलसी का पाया जाना है कि हो जाते हैं कर रहे हैं अपने प्रतिस्थापन लिखने की आवश्यकता है? – allyourcode
@allyourcode, तो यह बाहरीतम जोड़ी को प्रतिस्थापित करेगा। यह टीजी के उदाहरण से थोड़ा अलग है जो पहले अवसर को प्रतिस्थापित करेगा। – JaredPar
पर्ल में:
s/quick(.*)lazy/slow${1}energetic/;
vim में:
s/quick\(.*\)lazy/slow\1energetic/;
एक साफ रास्ता यह करने के लिए नहीं है रुबी में gsub ब्लॉक के साथ:
s = "The quick brown fox jumps over the lazy dog"
subs = {'quick' => 'slow', 'lazy' => 'industrious'}
s.gsub(/quick|lazy/) { |match| subs[match] }
# => "The slow brown fox jumps over the industrious dog"
आप एक शब्दकोश का उपयोग कर vim में ऐसा कर सकते हैं:
त्वरित भूरी लोमड़ी त्वरित ly आलसी ब्रूक के बगल में भाग गया:
:%s/quick\|lazy/\={'quick':'slow','lazy':'energetic'}[submatch(0)]/g
यह निम्न पाठ बदल जाएगा।
में:
धीमी भूरी लोमड़ी धीमी ly ऊर्जावान ब्रूक के बगल में भाग गया।
यह देखने के लिए कि यह कैसे काम करता है, :help sub-replace-expression
और :help Dictionary
देखें। संक्षेप में,
\=
आपको एक विम अभिव्यक्ति के परिणामस्वरूप प्रतिस्थापित करने देता है।{'quick':'slow', 'lazy':'energetic'}
एक vim शब्दकोश (पर्ल या गहरे लाल रंग का, या जावास्क्रिप्ट में एक वस्तु में एक हैश की तरह) लुकअप के लिए[]
उपयोग करता है।submatch(0)
मिलान किया स्ट्रिंग
यह जब कोड पुनर्रचना काम में आ सकते हैं - कहते हैं कि तुम foo
, bar
के लिए चर नाम का आदान-प्रदान करना चाहते हैं, और baz
बदलते
foo
→bar
bar
→baz
baz
→foo
%s///
आदेशों की एक दृश्य का उपयोग करना मुश्किल हो सकता है, जब तक आप अस्थायी चर नाम का इस्तेमाल किया है - लेकिन क्या आप वाकई उन कुछ और पूरा उपयोग नहीं कर रहे थे बनाने के लिए होगा। इसके बजाय, आप एक पास में यह करने के लिए एक शब्दकोश का उपयोग कर सकते हैं:
:%s/\<\%(foo\|bar\|baz\)\>/\={'foo':'bar','bar':'baz','baz':'foo'}[submatch(0)]/g
कौन इस कोड
int foo = 0;
float bar = pow(2.0, (float) foo);
char baz[256] = {};
sprintf(baz,"2^%d = %f\n", foo, bar);
में बदल जाता है:
int bar = 0;
float baz = pow(2.0, (float) bar);
char foo[256] = {};
sprintf(foo,"2^%d = %f\n", bar, baz);
यदि आप पाते हैं अपने आप को इस एक बहुत कर रही है, आप अपने ~/.vimrc
:
" Refactor the given lines using a dictionary
" replacing all occurences of each key in the dictionary with its value
function! Refactor(dict) range
execute a:firstline . ',' . a:lastline . 's/\C\<\%(' . join(keys(a:dict),'\|'). '\)\>/\='.string(a:dict).'[submatch(0)]/ge'
endfunction
command! -range=% -nargs=1 Refactor :<line1>,<line2>call Refactor(<args>)
012 में निम्नलिखित जोड़ना चाह सकते हैं
यह आपको :Refactor {'frog':'duck', 'duck':'frog'}
कमांड का उपयोग करने देता है, और मैन्युअल रूप से मैन्युअल रूप से रेगेक्स बनाने की तुलना में थोड़ा कम दोहराव देता है। \ B
चास के जवाब अच्छा है, केवल दूसरी बात मैं उल्लेख करें कि यदि आप शब्द स्वैप कर रहे हैं तो आप शायद
\ b (| बार | | baz qux foo) पर मिलान किया जाना चाहते है
मिलान सबस्ट्रिंग से बचने के लिए। आप शब्द अदला-बदली की एक बहुत कर हैं, तो आप regexps थोड़ा सीमित खोजने के लिए शुरू करते हैं और तरह कुछ करने के लिए चाहते हो सकता है:
जल्दी भूरी लोमड़ी जल्दी से भाग गया:
join '', map { exists $subst{$_} ? $subst{$_} : $_ } split /\b/, $string
आप vim प्रतिस्थापन जोड़ सकते हैं आलसी झील के बगल में।
:s/quick/slow/|s/lazy/energetic/
धीमी भूरी लोमड़ी जल्दी से ऊर्जावान ब्रूक के बगल में भाग गया।
लाभ यहाँ आप सिर्फ एक बार
Rgds
प्रश्न के अनुसार अनुरोध किए गए एक भी नियमित अभिव्यक्ति नहीं है, लेकिन समस्या के vim भाग के लिए सबसे अच्छा समाधान के लिए +1, IMHO। धन्यवाद! –
- 1. एक पर्ल नियमित अभिव्यक्ति
- 2. मैं एक विम नियमित अभिव्यक्ति में सेटिंग या चर का विस्तार कैसे कर सकता हूं?
- 3. एक नियमित अभिव्यक्ति में, एक चीज़ या किसी अन्य से मेल खाते हैं, या दोनों
- 4. डिबगिंग पर्ल नियमित अभिव्यक्ति
- 5. सी ++ एक नियमित अभिव्यक्ति
- 6. एक नियमित अभिव्यक्ति
- 7. PostgreSQL: क्यों अभिव्यक्ति के रूप में subqueries एक पंक्ति से अधिक नहीं लौट सकते हैं, लेकिन कार्य कर सकते हैं?
- 8. मैं एक पर्ल नियमित अभिव्यक्ति में एक शाब्दिक बिंदु की अनुमति कैसे दे सकता हूं?
- 9. नियमित अभिव्यक्ति [कोई भी संख्या]
- 10. विशिष्ट या नियमित अभिव्यक्ति में
- 11. पर्ल: एक फ़ाइल के माध्यम से और स्थानापन्न
- 12. बैकबोन रिलेशनल - दृष्टांत नहीं कर सकते हैं एक से अधिक ,,,
- 13. नियमित अभिव्यक्ति, केवल एक
- 14. एक सूची में (आइटम, अन्य) से अधिक दोहराएं
- 15. एक नियमित अभिव्यक्ति
- 16. कास्ट एक निरंतर अभिव्यक्ति में प्रकट नहीं कर सकते हैं
- 17. नियमित अभिव्यक्ति एक टाइमस्टैम्प
- 18. पर्ल के नियमित अभिव्यक्तियों के साथ मैं एक से अधिक नईलाइनों को कैसे बदलूं?
- 19. मैं कैसे जांच कर सकते हैं एक मॉडल दृश्य मेरी self.window.rootViewController से अधिक वर्तमान में है?
- 20. एक नियमित अभिव्यक्ति
- 21. नियमित अभिव्यक्ति या रिक्त
- 22. नियमित अभिव्यक्ति - रूबी बनाम पर्ल
- 23. एक नियमित अभिव्यक्ति
- 24. विम में एक से अधिक वैश्विक आदेशों त्रुटि देता है: नहीं कर सकते: वैश्विक पुनरावर्ती
- 25. मैं अलग-अलग चर में पर्ल नियमित अभिव्यक्ति से कैप्चर कैसे स्टोर कर सकता हूं?
- 26. पर्ल विभाजन और नियमित अभिव्यक्ति
- 27. एसक्यूएल में एक नियमित अभिव्यक्ति के लिए एक प्रश्न मैच?
- 28. आप नियमित अभिव्यक्ति में दो शब्दों में से किसी एक से कैसे मेल खाते हैं?
- 29. क्या नियमित अभिव्यक्ति स्ट्रिंग से डुप्लिकेट आइटम निकाल सकती है?
- 30. नियमित अभिव्यक्ति प्रदर्शन: बूस्ट बनाम पर्ल
आप 'ई' संशोधक भूल गए हैं। –
वह क्या करता है? प्रतिस्थापन का मूल्यांकन? क्या अन्य प्रोग्रामिंग भाषाओं में ऐसा कुछ है? – allyourcode
इसकी आवश्यकता नहीं है/क्योंकि यह एक साधारण इंटरपोलेशन है, दावा करने से पहले कोड को आजमाएं। –