regex का उपयोग करके इस पैटर्न को कैसे खोजें?सी शैली ब्लॉक टिप्पणियों को खोजने के लिए नियमित अभिव्यक्ति
सी शैली ब्लॉक टिप्पणियां
/* xxxxxxxxxxxx */
regex का उपयोग करके इस पैटर्न को कैसे खोजें?सी शैली ब्लॉक टिप्पणियों को खोजने के लिए नियमित अभिव्यक्ति
सी शैली ब्लॉक टिप्पणियां
/* xxxxxxxxxxxx */
मैं अत्यधिक सिर्फ एक पार्सर का उपयोग करना चाहिये, टिप्पणी की तरह है, लेकिन अगर सिर्फ मनोरंजन के लिए - मेरे सिर के ऊपर से, आप गहरे लाल रंग का उपयोग करते हुए कुछ इस तरह कर सकता है, यह मानते हुए कि आप पहले से ही कैसे एक फ़ाइल से सामग्री प्राप्त करने जानते हैं (ध्यान में रखना यह बहुत ही किसी न किसी और सिर्फ एक संभव गाइड है - prolly बॉक्स से बाहर काम नहीं करेगा):
def one_liner_comment string
string.match /\/\*.*\*\//
end
def multi_liner_comment_start string
# if always checking for one_liner_comment in code would not need first !one_...
!one_liner_comment(string) && string.match(/\/\*/)
end
def multi_liner_comment_end string
# if always checking for one_liner_comment in code would not need first !one_...
!one_liner_comment(string) && string.match(/\*\//)
end
फिर निर्धारित करने के लिए जहां आप बस कर रहे हैं
if one_liner(string)
inline = true
elsif multi_liner_comment_start(string)
started = true
elsif started && multi_liner_comment_end(string)
ended = true
end
फिर यहां से अपनी टिप्पणियों के साथ जो भी करना चाहते हैं उसे निष्पादित करें।
if inline
# do whatever you want
one_liner = false
elsif started && !ended
# do whatever you want -> append or create new string
elsif started && ended
# do whatever you want -> append to string
started = false
ended = false
end
ज़रूर यह भी साफ किया जा सकता है ...
\/\*(\*(?!\/)|[^*])*\*\/
का उपयोग कर एक पंक्ति और बहु लाइन ब्लॉक टिप्पणियों पर कब्जा करने की कोशिश करो। यह /*
या तो के किसी भी संख्या के बाद की खोज करता है:
*
कि एक /
*
और फिर समापन */
फिर से।
आपको एक अलग शाखा में व्हाइटस्पेस वर्णों से मेल खाने की आवश्यकता नहीं है; '[^ * /]' उन्हें कवर किया गया है। सभी '| \ s' आपको [आपदाजनक बैकट्रैकिंग] (http://www.regular-expressions.info/catastrophic.html) तक खुलता है। साथ ही, आपको वहां से उस स्लैश को प्राप्त करने की आवश्यकता है, या आपका रेगेक्स उनके अंदर स्लेश के साथ टिप्पणियों से मेल नहीं खा पाएगा। –
आपके सुझावों में बदल गया (हालांकि ओपी ने कहा, स्लेश के साथ टिप्पणियां कोई समस्या नहीं लगती हैं) – Campfire
क्यों नहीं '/\*(.(?!\*/))*\*/'? पहले एक '/ *' फिर किसी भी चरित्र के बाद '* /' के बाद '* /' – zzh1996
क्या होगा यदि '/ *' एक ही पंक्ति पर है और '//' के बाद, जिसका अर्थ है कि यह कोई टिप्पणी शुरू नहीं करता है? – Patashu
नहीं, मुझे ऐसी स्थिति को संभालने की आवश्यकता नहीं है – linquize
नियमित अभिव्यक्तियों का उपयोग करने के अलावा, यदि आप सभी बाहर जाना चाहते हैं तो आप सी (या जो भी) भाषा व्याकरण के साथ एक भाषा पार्सर का उपयोग कर सकते हैं। उदाहरण हैं yacc, javacc, antlr –