php - Regex sentence content matching -


के शीर्ष उत्तर का अनुकूलन।

क्या कोई मुझे ऊपर दिए गए regex को पुन:

यह preg_split के लिए बनाया गया था, मुझे इसे preg_replace_callback के लिए ज़रूरत है।

नीचे मेरे प्रयास अभी तक हैं लेकिन नहीं कर सकते इसे अंतिम वाक्य से मेल करने के लिए प्राप्त करें क्योंकि यह सीमा की जांच करने के लिए देखने वाले लोगों पर निर्भर करता है:

- इसमें उदाहरण आउटपुट को अंतिम वाक्य को छोड़ दिया गया है।

मैं इस लेखक का हूं यह एक संशोधित संस्करण है जो आपके उद्देश्यों को पूरा कर सकता है:

एक बढ़ी हुई रिजक्स समाधान

मान लें कि आप हैंडलिंग के बारे में ध्यान रखें: श्री। और श्रीमती आदि संक्षिप्ताक्षर, तो निम्नलिखित एकल regex समाधान बहुत अच्छी तरह से काम करता है:

  & lt;? Php // test.php Rev: 20140218_1500 $ Re = '/ # मैच की समाप्ति समाप्त हो रही है?!? वैकल्पिक बोली के बाद (# $ 1: वाक्य। [^।!?] + # एक या अधिक गैर-अंत-वाक्य-वाक्य। (?: # शून्य या अधिक नहीं-एंड-ऑफ-डोज़ डॉट्स। , लेकिन केवल तभी: (?: # समूह स्वीकार्य डॉट विकल्प। (? = [^ \ S \ '"]) # डॉट ठीक है अगर गैर-वायदा द्वारा किया गया है, | (? & Lt; = # या निम्न में से कोई भी नहीं : श्री। # या तो "मिस्टर" | श्रीमती # या "मिसेज", | एमएस। # या "सुश्री", | जूनियर # या "जूनियर", | डॉ। # या " डॉ ", | प्रो। # या" प्रोफेसर ", | एसआर # # या" सीनियर ", | टी \। वी \ ए। # या" टीवीए ", # या ... (आपको मिले विचार)।) # अंतिम सकारात्मक विचार। # समूह स्वीकार्य डॉट विकल्प। [^।!?] * # शून्य या अधिक गैर-अंत-वाक्य-वर्ण।) * # शून्य या अधिक नहीं-एंड-ऑफ-वाक्य डॉट्स (?: # वाक्य अंत विकल्प [।!?] # या तो वाक्य विराम चिह्न का अंत [\ '"]? # वैकल्पिक बोली के बाद, # $ # या कोई विराम चिह्न के साथ स्ट्रिंग के अंत।) # वाक्य अंत विकल्प।) # अंत $ 1: वाक्य। \ S + | $) # वाक्य ws या EOS के साथ समाप्त होता है। / Ix '; $ text =' यह वाक्य एक है। वाक्य दो! वाक्य thr '।' 'वाक्य "चार"। वाक्य "पांच"! वाक्य "' 'छः'? वाक्य "सात" वाक्य "आठ!" 'डॉ।' जोन्स ने कहा: "श्रीमती। स्मिथ आपके पास प्यारा बेटी है ' 'एआर!' टी वी ए एक बड़ी परियोजना है! आखिरी वाक्य '। बिना किसी समाप्ति विराम चिह्न'; $ वाक्य = सरणी (); // वाक्यों की सरणी प्रारंभ करें। फ़ंक्शन _getSentences कॉलबैक ($ मैचों) {वैश्विक $ वाक्य; $ वाक्य [ ] = $ मैचों [1]; वापसी '';} preg_replace_callback ($ re, '_getSentences कॉलबैक', $ टेक्स्ट); ($ i = 0; $ i & lt; गिनती ($ वाक्य); ++ $ i) {printf ("वाक्य [% d] = [% s] \ n", $ i + 1, $ वाक्य [$ i]);}? & Gt;  

ध्यान दें कि आप आसानी से जोड़ सकते हैं या अभिव्यक्ति से संक्षेप ले लो। निम्नलिखित परीक्षण पैराग्राफ को देखते हुए:

यह वाक्य एक है वाक्य दो! वाक्य तीन? वाक्य "चार" वाक्य "पांच"! वाक्य " छह "वाक्य" सात "वाक्य 'आठ!' डा। जोन्स ने कहा: "श्रीमती। स्मिथ आपकी एक सुंदर बेटी है! "टीवीए एक बड़ी परियोजना है!

यहां स्क्रिप्ट से आउटलुक है:

वाक्य [ 1] = [यह वाक्य एक है।]
वाक्य [2] = [दो वाक्य!]
वाक्य [3] = [वाक्य तीन?]
वाक्य [4] = [वाक्य "चार"।]
वाक्य [5] = [वाक्य "पाँच"!]
वाक्य [6] = [वाक्य "छः"?]
वाक्य [7] = [वाक्य "सात"]
वाक्य [ 8] = [वाक्य 'आठ!']
वाक्य [9] = [डॉ। जोन्स ने कहा: "श्रीमती। स्मिथ आपकी एक सुंदर बेटी है! "]
वाक्य [10] = [टीवीए एक बड़ी परियोजना है!]
वाक्य [11] = [अंतिम

संपादित करें: 2014-02-19 08:00 अंतिम वाक्य के साथ कोई भी समाप्त विराम चिह्न]

उम्मीद है कि यह मदद करता है और खुश Regexing! स्ट्रिंग के अंत में अब विराम चिह्न की आवश्यकता नहीं है।


Comments