2012-12-28 12 views
6

मैं मानक \b शब्द सीमा का उपयोग कर रहा था। हालांकि, यह डॉट (।) चरित्र से जिस तरह से मैं चाहता हूं उससे काफी सौदा नहीं करता है।रेगेक्स शब्द सीमा वैकल्पिक

तो निम्नलिखित regex:

\b(\w+)\b

cats और cats.dog में dogs मेल कराएंगे मैं एक स्ट्रिंग है cats and dogs don't make cats.dogs कहते है। (।)

  1. यह डॉट शामिल नहीं है चरित्र
  2. यह कम से कम एक स्थान (द्वारा समझाया गया है) चरित्र पर:

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

कोई विचार ?!

पीएस मैं PHP

के लिए इस की जरूरत है
+0

आप "ungreedy" –

उत्तर

5

आप (?<=\s) उपयोग करने से पहले और (?=\s)\b के स्थान पर बाद यह सुनिश्चित करने के पहले और इसके बाद एक जगह नहीं है की कोशिश कर सकते हैं, हालांकि आप भी शुरू में किया जा रहा है की संभावना के लिए अनुमति देने के लिए चाहते हो सकता है या (?<=\s|^) और (?=\s|$)

के साथ स्ट्रिंग यह स्वचालित रूप से "शब्दों" को बाहर निकाल देगा उन में एक . साथ, लेकिन यह भी यह और पूर्ण विराम के बीच कोई जगह नहीं है के बाद से एक वाक्य के अंत में एक शब्द शामिल नहीं होंगे के अंत ।

+0

धन्यवाद चाहते हैं। किसी भी तरह से मैं वाक्य की शुरुआत और अंत में शब्दों को भी शामिल कर सकता हूं ?! मुझे इसकी आवश्यकता नहीं हो सकती है, लेकिन यह जानना अच्छा होगा। –

2

जो आप मिलान करने का प्रयास कर रहे हैं वह आसानी से सरणी और स्ट्रिंग कार्यों के साथ किया जा सकता है।

$parts = explode(' ', $str); 
$res = array_filter($parts, function($e){ 
    return $e!=="" && strpos($e,".")===false; 
}); 

मैं इस विधि के रूप में यह समय की बचत होती है सलाह देते हैं। अन्यथा एक अच्छा रेगेक्स समाधान खोजने के लिए कुछ घंटों बर्बाद करना काफी अनुत्पादक है।

+0

मुझे इसे 'preg_replace' फ़ंक्शन' के पहले चरण के रूप में किसी अन्य रेगेक्स के हिस्से के रूप में चाहिए, इसलिए यह –

+0

करने के लिए मुझे काफी काम नहीं करेगा, इसके बाद यह पूछने के लिए बेहतर होगा कि आपको वास्तव में क्या चाहिए। Regex से बेहतर समाधान हो सकता है। –