2009-03-22 11 views
22

मैं पर्ल सीख रहा हूं, इसलिए कृपया इस नोब प्रश्न के लिए मेरे साथ भालू।मैं एक स्ट्रिंग में अक्षर एन बार दोहरा सकता हूं?

मैं एक स्ट्रिंग में एक चरित्र एन बार कैसे दोहरा सकता हूं?

मैं नीचे की तरह कुछ करना चाहता हूँ:

$numOfChar = 10; 

s/^\s*(.*)/' ' x $numOfChar$1/; 
+0

आप किसी भी त्रुटि संदेश मिलता है? – tstenner

उत्तर

24

डिफ़ॉल्ट रूप से , प्रतिस्थापन विकल्प के रूप में एक स्ट्रिंग लेते हैं। प्रतिस्थापन प्रक्रिया में कोड निष्पादित करने के लिए आपको e ध्वज का उपयोग करना होगा।

$numOfChar = 10; 

s/^(.*)/' ' x $numOfChar . $1/e; 

यह अपने पाठ के शुरू करने के $numOfChar अंतरिक्ष जोड़ देगा। पाठ में हर पंक्ति के लिए यह ऐसा करने के लिए या तो -p ध्वज (त्वरित, एक पंक्ति का प्रसंस्करण के लिए) का उपयोग करें:

cat foo.txt | perl -p -e "$n = 10; s/^(.*)/' ' x $n . $1/e/" > bar.txt 

या अगर यह एक बड़ा स्क्रिप्ट का एक हिस्सा है वैश्विक लिए -g और -m झंडे -g का उपयोग करें (, प्रतिस्थापन दोहराया IE और -m प्रत्येक पंक्ति की शुरुआत) पर ^ मैच बनाने के लिए:

$n = 10; 
$text =~ s/^(.*)/' ' x $n . $1/mge; 
8

आप सही हैं। पर्ल का x ऑपरेटर कई बार एक स्ट्रिंग दोहराता है।

print "test\n" x 10; # prints 10 lines of "test" 

संपादित करें: सबसे अच्छा (यानी सबसे मेंटेनर अनुकूल) एक नियमित अभिव्यक्ति के अंदर ऐसा करने के लिए, यह शायद होगा सिर्फ एक और चर को मान देना।

my $spaces = " " x 10; 
s/^\s*(.*)/$spaces$1/; 

वहाँ एक अतिरिक्त चर के बिना यह करने के लिए तरीके हैं, लेकिन यह सिर्फ मेरी $ 0.02 है कि यह बनाए रखने के लिए आसान है अगर आप इसे इस तरह से कर सकेंगे।

संपादित करें: मैंने अपना रेगेक्स तय किया है। क्षमा करें मैंने इसे पहली बार सही नहीं पढ़ा।

+1

यह काम नहीं किया। मुझे लगता है कि यह केवल प्रिंट स्टेटमेंट – chappar

+0

के अंदर काम करता है मेरे लिए यह perl 5.10.0 – tstenner

+0

के साथ काम करता है मैं इस तरह कुछ कोशिश कर रहा हूं। एस /^(.*)/ 'पी' एक्स $ numOfChar /; मैंने अपना प्रश्न – chappar

15

आपका रेगुलर एक्सप्रेशन के रूप में लिखा जा सकता है:

$numOfChar = 10; 

s/^(.*)/(' ' x $numOfChar).$1/e; 

लेकिन - आप के साथ ऐसा कर सकते हैं:

s/^/' ' x $numOfChar/e; 

या बिल्कुल regexps का उपयोग किए बिना:

$_ = (' ' x $numOfChar) . $_; 
+0

संशोधित किया है ध्यान दें कि यह उत्तर अब लागू नहीं होता है, क्योंकि इस उत्तर के बाद चप्पार ने अपने प्रश्न में एक \ * * जोड़ा था। – ysth

+1

इस समय कोई जवाब वास्तव में लागू नहीं होता है। लेकिन इसे आसानी से ठीक किया जा सकता है। बस बदलें: एस/^/'' x $ numOfChar/e; में: एस/^ \ एस */'' x $ numOfChar/e; –

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