सबसे पहले आप क्या कोष्ठक का गठन किया यह निर्णय लेना होगा, और वे नेस्ट किया जा सकता है। (इस उत्तर के लिए, मुझे लगता है कि वे हो सकते हैं)।
my @parens;
$str =~ s/(\((?: (?0)|[^()])* \))/push @parens, $1; "PARENS_$#parens"/gex;
तो अब आप कुछ है कि तरह लग रहा है के साथ छोड़ दिया जाता है: तो फिर तुम पाठ से उन कोष्ठक ब्लॉक को हटाने और एक प्लेसहोल्डर के साथ बदलने की जरूरत है
'100% California Grown Olives, Water, Salt And Ferrous Gluconate PAREN_0,asasd,
sadasdas.'
और यह अब आसान विभाजित करने के लिए है यह अल्पविराम पर। फिर प्रत्येक विभाजित टुकड़ों पर, PAREN_\d+
टोकन के लिए स्कैन करें, और @parens
सरणी से उन्हें बदलें। आपको अपनी स्रोत सामग्री के आधार पर एक और अद्वितीय प्लेसहोल्डर नाम का उपयोग करने की आवश्यकता हो सकती है।
कुछ की तरह:
s/PARENS_(\d+)/$parens[$1]/ge for my @segs = split /,\s*/ => $str;
say for @segs;
जो एक उदाहरण स्ट्रिंग के लिए:
my $str = "foo (b,a,r), baz (foo, (bar), baz), biz";
प्रिंट:
foo (b,a,r)
baz (foo, (bar), baz)
biz
स्रोत
2011-12-12 21:56:24
क्या नेस्टेड कोष्ठक की संभावना है? यदि ऐसा है, तो Regexes बिल फिट नहीं हो सकता है। –
नहीं, संभव नहीं है। केवल एक जोड़ी कोष्ठक, या जोड़े लेकिन – snoofkin