पर आधारित सरणी में स्प्लिट स्ट्रिंग को विराम चिह्नों या रिक्त स्थान की उपस्थिति के आधार पर मुझे स्ट्रिंग को कई अलग-अलग भागों में विभाजित करने का एक तरीका चाहिए।रेगेक्स - विराम चिह्न/रिक्त स्थान
क्या मैं यह मतलब है कि हर शब्द का अपना सरणी तत्व में विभाजित किया जाना चाहिए, इसके अलावा विराम चिह्न जो शुरू में या शब्द के अंत पर है भी अपनी ही सरणी तत्व में रखा जाना चाहिए है।
उदाहरण के लिए: मैं (शब्द के बीच में जैसे अक्षर लोप) एक जुदाई ** संपादित का कारण नहीं होना चाहिए शब्द के बीच में तो विराम चिह्न
array(
"Hello",
", "
"Harry",
"Potter"
". ",
"I'm",
"Tom",
"Riddle",
". "
)
में स्ट्रिंग Hello, Harry Potter. I'm Tom Riddle.
चालू करने के लिए सक्षम होना चाहिए : ** वांछित व्यवहार को स्पष्ट करने के लिए, I'm
, didn't
, आदि एक शब्द रहना चाहिए, लेकिन hello!
, "okay,
आदि प्रारंभ या अंत में विराम चिह्न से अलग किया जाना चाहिए।
इसके अलावा, विराम चिह्न जो मैं खोज में शामिल होना चाहते हैं कर रहे हैं:
- । (पूर्ण स्टॉप/अवधि)
- ? (प्रश्न चिह्न)
- ! (उद्घोषणा चिह्न)
- , (अल्पविराम)
- ; (सेमी-कोलन)
- : (कोलन)
- (-) (हाइफन-डैश)
- ((ब्रैकेट शुरू)
- ) (अंत ब्रैकेट)
- {(शुरू Squigly ब्रेस)
- } (अंत Squigly ब्रेस)
- [(वर्ग कोष्ठक शुरू)
- ] (अंत वर्ग कोष्ठक)
- '(एकल उद्धरण चिह्न)
- "(दोहरा उद्धरण चिह्न)
- ... (elpises)
यह है:
preg_split('/(\s|[\.,\/])/', $string, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
हालांकि, इस के साथ समस्याओं कर रहे हैं:
-
सामान्य विराम चिह्न के रूप में
- विराम चिह्न मध्य शब्द मायने रखता है
- सरणी सरणी ई युक्त तत्व पट्टे में भी जगह नहीं है। संपादित करें: अस्पष्टता के लिए खेद है; इसके द्वारा, मेरा मतलब था कि मैं विराम चिह्नों को उस स्थान को रखना चाहता था जो पंट्यूशन चिह्न के बाद/पहले है। जैसे यदि यह अल्पविराम है, तो यह
,
(बाद में स्थान) होगा, लेकिन यदि यह एक उद्घाटन ब्रैकेट है, तो यह(
(पहले स्थान) होगा। - जब मैं शेष विराम चिह्नों को जोड़ता हूं तो मुझे चाहिए (
preg_split("/(\s|[\.?!,;:-(){}[]'\"…\/])/",
) मुझे एक त्रुटि मिलती है।मैं बहुत यकीन है कि यह गलती से हुआ है कि कोई अनपेक्षित चरित्र के कारण कर रहा हूँ, इसलिए मैंpreg_quote
, जो\.\?\!,;\:\-\(\)\{\}\[\]'"…
लौटे के माध्यम से है कि पूरी बात भाग गया, लेकिन यह अभी भी त्रुटि देता है:Parse error: syntax error, unexpected '…' (T_STRING), expecting ',' or ')' in [...][...] on line 5
मेरे regex की समझ काफी सीमित है, लेकिन php दस्तावेज़ों को देखने के बाद मैं इकट्ठा कर सकता हूं कि उपरोक्त कोड प्रत्येक व्हाइटस्पेस पर शब्दों को अलग करता है, या हर बार जब यह कॉमा या विराम चिह्न का सामना करता है। (अगर मैं वहां गलत हूं तो मुझे सही करें?) और जैसा कि मैंने समझा, स्क्वायर ब्रैकेट्स के भीतर बाकी वर्ण जोड़कर यह उन पात्रों में से किसी भी स्ट्रिंग को अलग कर देगा (?) चूंकि यह काम नहीं कर रहा है, मैं मान लीजिए कि यह कैसे काम करता है इसके बारे में मौलिक गलतफहमी है, इसलिए एक स्पष्टीकरण की सराहना की जाएगी।
प्रतिक्रिया के लिए बहुत बहुत धन्यवाद; जो संख्या 4 में आप वर्णन करते हैं वह काम नहीं कर रहा है, या शायद आपने मेरे प्रश्न को गलत समझा है (माफ करना अगर यह खराब शब्द है)। https://gyazo.com/2db04904b5f9a5c9d06a7986c507b057 कॉमा के बाद एक जगह होने के लिए मेरा इच्छित परिणाम क्या था, इसलिए 2 '", "' 'होगा। यदि यह संभव नहीं है, तो क्या सरणी में रिक्त स्थान भी वापस करना संभव है ताकि मैं इसके माध्यम से लूप कर सकूं और इसे इस तरह कुशल बना सकूं? –
वास्तव में उस अंतिम टिप्पणी को अनदेखा करें, मेरे कोड को देखते हुए, मुझे लगता है कि वहां केवल अपने तत्वों के रूप में रिक्त स्थान होना आसान होगा (इसलिए वहां एक सरणी तत्व होगा जिसमें केवल एक ही स्थान होगा)। क्या कोड को ऐसा करना संभव है? –
ओह, अगर मैं 'var_dump()' का उपयोग करता तो भी मैं त्रुटि पकड़ा होता। वास्तव में यह माना जाता था कि अल्पविराम के साथ अंतरिक्ष को पकड़ना था, अभी तक यह सुनिश्चित नहीं है कि मैंने क्या गलत किया है। लेकिन मैं उम्मीद कर रहा था कि आप देखेंगे कि यह दृष्टिकोण कैसे काम करता है और जो भी आप वास्तव में चाहते हैं उसे ट्विक करने में सक्षम हो (जो अभी भी पूरी तरह से स्पष्ट नहीं है, हालांकि आपकी मूल - मूलताओं की यह पहलू थी)। – alexis