2011-06-13 10 views
10

प्रश्न Writing text into new line when a particular character is found का उत्तर देने का प्रयास करते हुए, मैंने Regexp::Grammars पर नियोजित किया है। इसमें मुझे बहुत दिलचस्पी है और अंत में मुझे सीखने का कारण था। मैंने देखा है कि विवरण अनुभाग लेखक एक LaTeX पार्सर (मैं एक उत्साही LaTeX उपयोगकर्ता हूँ, तो यह रुचि मुझे) लेकिन यह एक अजीब निर्माण यहाँ देखा गया है:केवल एक अकेला देखभाल वाला चरित्र वर्ग क्या करता है?

<rule: Option>  [^][\$&%#_{}~^\s,]+ 

    <rule: Literal> [^][\$&%#_{}~^\s]+ 

[^] चरित्र वर्गों क्या हासिल करते हैं?

उत्तर

20

[^][…] नहीं दो चरित्र वर्गों है लेकिन सिर्फ एक चरित्र ], [, और को छोड़कर किसी अन्य चरित्र युक्त वर्ग (Special Characters Inside a Bracketed Character Class देखें):

हालांकि, अगर ]पहले है (या दूसरा अगर पहला चरित्र एक कैरेट है) एक ब्रैकेटेड कैरेक्टर क्लास का चरित्र, यह कक्षा के अंत को इंगित नहीं करता है (क्योंकि आपके पास खाली कक्षा नहीं हो सकती है) और इसे वर्णों के सेट का हिस्सा माना जाता है जिसे बिना भागने के मिलान किया जा सकता है।

उदाहरण:

"+" =~ /[+?*]/  # Match, "+" in a character class is not special. 
"\cH" =~ /[\b]/  # Match, \b inside in a character class 
        # is equivalent to a backspace. 
"]" =~ /[][]/  # Match, as the character class contains. 
        # both [ and ]. 
"[]" =~ /[[]]/  # Match, the pattern contains a character class 
        # containing just ], and the character class is 
        # followed by a ]. 
+0

@Gumbo आप निश्चय के साथ कह सकते हैं कि अगर यह कैसे पर्ल Regex पार्स करता है, मैं अपने (गलत) जवाब को नष्ट करेगा है। आप विश्वस्त हैं? – Phrogz

+0

@ फ़्रोगज़, इस प्रकार पर्ल इसे संभालता है। – Qtax

+0

@ गंबो, जो कि लाटेक्स पार्सर की आवश्यकता के साथ अधिक मेल खाता है, क्या यह कहीं भी दस्तावेज़ों में है?!? –

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