मैं जो संलग्न है, उस पर कब्जा किए बिना रेगेक्स में ओआर का उपयोग कर सकता हूं?


115

मैं अपने regex के निर्माण के लिए rubular.com का उपयोग कर रहा हूं , और उनके प्रलेखन में निम्नलिखित का वर्णन है:

(...)   Capture everything enclosed
(a|b)   a or b

मैं उस पर कब्जा किए बिना एक OR अभिव्यक्ति का उपयोग कैसे कर सकता हूं? उदाहरण के लिए, मान लें कि मैं "एसी" या "बीसी" पर कब्जा करना चाहता हूं। मैं regex का उपयोग नहीं कर सकता

(a|b)(c)

सही? तब से मैं एक समूह में या तो "ए" या "बी" और दूसरे में "सी" पर कब्जा करता हूं, समान नहीं। मुझे पता है कि मैं पकड़े गए परिणामों के माध्यम से फ़िल्टर कर सकता हूं, लेकिन ऐसा लगता है कि अधिक काम ...

क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है? मैं जावा में इस का उपयोग कर रहा हूँ, अगर यह उचित है।


रूब्युलर के लिंक के लिए अच्छा एक +1
bukowski

जवाबों:


181

सिंटैक्स के साथ तथाकथित गैर-कैप्चरिंग समूहों का उपयोग करने वाले नियमित अभिव्यक्ति के कार्यान्वयन के आधार पर (?:…):

((?:a|b)c)

यहां (?:a|b)एक समूह है, लेकिन आप इसके मैच का संदर्भ नहीं दे सकते। तो आप केवल उस मैच का संदर्भ दे सकते हैं ((?:a|b)c)जो acया तो है bc


यह किया! सुपर फास्ट प्रतिक्रिया के लिए धन्यवाद। मैं समय सीमा (जो मुझे पता नहीं था) की समय सीमा समाप्त होने के बाद स्वीकार करेंगे।
goggin13

4
मैंने सोचा था कि विचार aया तो कब्जा करने के लिए नहीं था b। दूसरे शब्दों में, मिलान करने ac या करने के लिए bc, लेकिन केवल कैप्चर करें c:(?:a|b)(c)
एलन मूर

1
@AlanMoore क्या एक या दूसरे को बयान में कैद करना संभव है? तो मैं पैटर्न की तलाश कर रहा हूं acया ab, लेकिन मैं उत्पादन करना चाहता हूं abअगर abऔर केवल 'सी' आउटपुट 'एसी' है।
मूंदड़ा

24

यदि आपके कार्यान्वयन में यह है, तो आप गैर-कैप्चरिंग कोष्ठकों का उपयोग कर सकते हैं:

(?:a|b)

@mmutz तेजी से प्रतिक्रिया के लिए धन्यवाद! काश मैं दोनों जवाबों को स्वीकार कर पाता, यही मैं चाह रहा था
goggin13

3

यहां तक ​​कि रबुलर आपको कोष्ठक का उपयोग नहीं करता है और पूर्ववर्तीता |कम है। उदाहरण के लिए a। Bc ccc से मेल नहीं खाता है


'~ ~' ऑपरेटर क्या करता है? मुझे आपकी अभिव्यक्ति पसंद है, कम
परेंस के

! ~ "मेल नहीं खाता" के लिए एक गड़बड़ी है, यह मेरी ओर से मैला लेखन था; तय है, धन्यवाद।
msw

2
मैं तुम्हें नहीं मिलता इस बात की निम्न मिसाल |है कि आपको पार्न्स का उपयोग क्यों करना है। (?:a|b)cमैचों acया bc(वांछित व्यवहार), जबकि a|bcमैच aया bc
एलन मूर

2

यदि आपके या विकल्प सभी एकल वर्ण हैं - तो आप "वर्ण सेट" ऑपरेटर का उपयोग कर सकते हैं:

([ab]c)

यह केवल मेल खाएगा acया bcयह अधिक पठनीय है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.