2012-10-03 16 views
6

मेरे पास regex है जो शब्दों को ठीक से मेल खाता है सिवाय इसके कि अगर उनमें ~ क्वेरी है जो C++ क्लास के सदस्य का नाम है। सदस्य वर्णों के लिए नीचे दिखाए गए शब्द सीमा का उपयोग करने की आवश्यकता है जो एकल वर्ण हैं। $key =~ /\b$match\b/विशेष वर्णों से शुरू होने वाली शब्द सीमा से मेल खाने के लिए regex

मैं कई भाव मैंने सोचा था कि के रूप में /[~]*\b$match\b/ या /\b[~]*$match\b/

इस तरह काम करेगा क्या यह संभव है शब्दों पर एक शब्द सीमा है कि विशेष वर्ण हो सकती है डालने की कोशिश की? आप एक शब्द चरित्र के रूप में ~ के इलाज के लिए, [\w~] को \w बदल चाहते हैं

+1

क्या आप ठीक से पोस्ट कर सकते हैं जो आप मिलान करना चाहते हैं .. रेगेक्स विशिष्ट मामलों के लिए जेनरेट किए जाते हैं, केवल यह नहीं मानते कि आपकी स्ट्रिंग क्या है .. –

+1

'/ ~ \ b $ match \ b/'मानते हुए' ~ क्वेरी 'से मेल खाना चाहिए कि '$ match' में निहित रेगेक्स' क्वेरी 'से मेल खाएगा। (मैंने अभी परीक्षण किया है, और '" ~ foo "= ~/~ \ bfoo \ b /' सत्य के रूप में मूल्यांकन करता है।) – cdhowie

+0

$ मिलान चर में ~ क्वेरी, क्वेरी, या एकल अक्षर जैसे पी हो सकता है। संभवतः किसी भी अन्य अजीब नाम डेवलपर्स अपने वर्ग के तरीकों के लिए उपयोग करते हैं। Regex एक subroutine का हिस्सा है जो एक खोज कर रहा है। सभी मैच ठीक है जब $ मैच में ~ क्वेरी है। –

उत्तर

10
\b 

के लिए

(?:(?<!\w)(?=\w)|(?<=\w)(?!\w)) 

कम है।

(?:(?<![\w~])(?=[\w~])|(?<=[\w~])(?![\w~])) 

उदाहरण उपयोग:

my $word_char = qr/[\w~]/; 
my $boundary = qr/(?<!$word_char)(?=$word_char) 
        |(?<=$word_char)(?!$word_char)/x; 

$key =~ /$boundary$match$boundary/ 

हम जानते हैं $match केवल कुछ ऐसा है जो शुरू होता है और एक $word_char साथ समाप्त होता है मिलान कर सकते हैं, तो हम सरल बना सकते हैं इस प्रकार है:

my $word_char = qr/[\w~]/; 
my $start_bound = qr/(?<!$word_char)/; 
my $end_bound = qr/(?!$word_char)/; 

$key =~ /$start_bound$match$end_bound/ 

यह काफी सरल है कि हम इनलाइन कर सकते हैं।

$key =~ /(?<![\w~])$match(?![\w~])/ 
+0

धन्यवाद यह वही करता है जो मैं चाहता हूं हालांकि यह लंबा है। $ key = ~/(?: (? <= [\ w ~]) (?! [\ w ~]) | (?

+1

यदि मुझे आवश्यकता है अन्य विशेष पात्रों को शामिल करें, उन्हें इस तरह जोड़ा जाएगा [\ w ~ '] –

+1

yup। xxxxxxxxxx – ikegami

4

मान लिया जाये कि आप तो आप इस

$key =~ /(?<![~\w])$match(?![~\w])/ 

जो केवल जाँच करता है लिख सकते हैं $match की सामग्री (यानी यह हमेशा एक वैध पहचानकर्ता शामिल हैं) की जांच की जरूरत नहीं है कि $match में स्ट्रिंग नहीं है इससे पहले या उसके बाद अल्फान्यूमेरिक्स, अंडरस्कोर या टिल्ड

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

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