2011-03-28 31 views
10

मेरे पास एक स्ट्रिंग है जिसे मैं विभाजित करना चाहता हूं। लेकिन विभाजक रनटाइम पर निर्धारित होता है और इसलिए मुझे इसे एक चर के रूप में पास करने की आवश्यकता होती है।`|` (पाइप) पर विभाजित क्यों अपेक्षित काम नहीं कर रहा है?

कुछ my @fields = split(/$delimiter/,$string); काम नहीं करता है। कोई विचार?


इनपुट:

abcd|efgh|23 

अपेक्षित आउटपुट:

abcd 
efgh 
23 
+2

आपका इनपुट, वास्तविक उत्पादन, और उम्मीद उत्पादन बेहद उपयोगी जानकारी होगी ... – Sean

+5

आप एक "सीमांकक" नहीं है, आपके पास "विभाजक" है। एक "डेलीमीटर" सीमाओं को चिह्नित करता है, यानी। यह दो सिरों पर है, जैसे डबल कोट्स। तत्वों के बीच एक "विभाजक" चला जाता है, जैसे "|" आपके उदाहरण इनपुट में। – tadmc

+0

संभावित डुप्लिकेट [मैं पर्ल रेगेक्स में विशेष वर्ण कैसे प्रबंधित करूं?] (Http://stackoverflow.com/questions/576435/how-do-i-handle-special-characters-in-a-perl-regex) – daxim

उत्तर

19

आप अपने सीमांकक से बचने के लिए के बाद से यह नियमित अभिव्यक्ति में एक विशेष चरित्र है की जरूरत है।

विकल्प 1:

$delimiter = quotemeta($delimiter); 
my @fields = split /$delimiter/, $string; 

विकल्प 2:

my @fields = split /\Q$delimiter/, $string; 
+0

पर काम कर रहा था, अधिक जानकारी के लिए, देखें: 'perldoc perlretut',' perldoc perlre' और/\\ क्यू/और 'perldoc -f quotemeta' के लिए खोजें। – shawnhcorey

+2

'विभाजन' के लिए तर्क एक delimiter नहीं है, लेकिन एक विभाजक है। – tchrist

+0

'perldoc -f split' के अनुसार नहीं:" PATTERN से मेल खाने वाली किसी भी चीज़ को फ़ील्ड को अलग करने वाला एक डिलीमीटर माना जाता है। " – Sean

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