/ / एक और मुश्किल preg_match - php, regex, text, preg-match

एक और मुश्किल preg_match - PHP, regex, पाठ, preg-match

बस यह देखने की जरूरत है कि क्या पैराग्राफ में "स्टॉप वर्ड" है, स्टॉप शब्द नीचे दिए गए ऐरे में हैं।

मेरे पास सूत्र था:

$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");

foreach ($pattern_array as $pattern) {
if (preg_match("/".$pattern.")/i", $paragraph)) {
$stopwords = 1;
}
}

जो पर्याप्त रूप से काम करता है लेकिन "पैन" जैसे छोटे शब्दों के लिए "पैंको" जैसे शब्द को स्टॉप शब्द के रूप में पहचाना जाता है।

तो रेगेक्स कुछ ऐसा होगा जैसे इसके पहले एक स्थान होना चाहिए या एक नई लाइन की शुरुआत हो और या तो पूर्ण विराम / अंतरिक्ष / अल्पविराम / (अन्य गैर-वर्ण ऑब्जेक्ट) में समाप्त हो।

इसके अलावा मैं स्टॉप शब्द की पहचान होते ही लूप से बाहर निकलने के लिए php को कैसे बता सकता था?

धन्यवाद दोस्तों, सीखने की गति को धीमा करते हुए मैं जा रहा हूँ!

उत्तर:

उत्तर № 1 के लिए 4

उपयोग b(preheat|minutes|stir|heat|put|bowl|pan)b अपने regex के रूप में। इस तरह, आपको केवल एक regex (कोई आवश्यक लूपिंग) की आवश्यकता नहीं है, और का उपयोग करके b शब्द सीमा के दावे, आप सुनिश्चित करते हैं कि केवल पूरे शब्द मेल खाते हैं।


जवाब के लिए 2 № 2

हेवन "टी ने यह कोशिश की, लेकिन b चरित्र समूह होना चाहिए जिसे आप ढूंढ रहे हैं PHP मैनुअल:

 b   word boundary

आपका कोड तब कुछ इस तरह दिखाई देगा:

$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");

foreach ($pattern_array as $pattern) {
if (preg_match("/b".$pattern."b/i", $paragraph)) { // also removed the ")"
$stopwords = 1;
break; // to exit the loop
}
}

संपादित करें: ऐसा लगता है कि लोग बी का उपयोग कर रहे हैं, इसलिए तदनुसार इसे बदल दिया


जवाब के लिए 2 № 3

आपको जोड़ने की जरूरत है b (जो शब्द सीमा के लिए खड़ा है)

"/b".$pattern."b/i"

आपको लगता है कि आपके कोड में एक टाइपो है, क्योंकि या तो आपके पास शाब्दिक समापन ब्रैकेट है (और शब्दों के "टी मिलान भागों") या आपके पास एक खुला समापन ब्रैकेट है।


जवाब के लिए 2 № 4

1. शब्द सीमाओं की जाँच के लिए आप "b" का उपयोग कर सकते हैं। एक शब्द सीमा को एक शब्द चरित्र और एक गैर-शब्द चरित्र के बीच की सीमा के रूप में परिभाषित किया गया है। शब्द-अक्षर अक्षर, संख्या और अंडरस्कोर हैं।

2. आप यह सब एक बार में, "|" का उपयोग करके कर सकते हैं:

$stopwords = preg_match("/\b(preheat|minutes|stir|heat|..other words..|pan)\b/i", $paragraph)