2009-09-19 6 views
6

मुझे पीसीआरई (पर्ल संगत नियमित अभिव्यक्तियों) की शक्ति में रूचि है और आश्चर्य है कि क्या वे सभी प्रमुख भाषाओं में एक वास्तविक दृष्टिकोण बनने की संभावना है (मुझे जावा में रूचि है)। यदि आवश्यक हो तो मैं पुस्तकालय का उपयोग करने के लिए तैयार हूं।सामान्य भाषाओं में पीसीआरई (पर्ल संगत नियमित अभिव्यक्तियों) के लिए क्या समर्थन है?

मैं भी इतना पेशेवरों और PCRE की विपक्ष का वर्णन करने में एक अच्छा पेज इसलिए यदि इस अस्तित्व में नहीं है यह जवाब

संपादित मैं जावा परे सत्ता में दिलचस्पी में यह शामिल करने के लिए उपयोगी हो सकता है नहीं मिल सका 1.6 रेगेक्स, विशेष रूप से नामित कैप्चर समूह

उत्तर

8

ऐसा लगता है कि अधिक मुख्यधारा की भाषा वास्तव में वास्तव में libpcre का उपयोग करने के बजाय "पर्ल-जैसी" regexes के अपने कार्यान्वयन का उपयोग करती है। इस वर्ग में आने वाली भाषाएं (कम से कम) जावा, जावास्क्रिप्ट और पायथन शामिल हैं। बचने के लिए नियमों,

जावा के java.util.regex पुस्तकालय एक वाक्य रचना है कि बहुत भारी पर्ल पर आधारित है (लगभग। संस्करण 5.8) का उपयोग करता regexes, \p और \P यूनिकोड कक्षाएं, गैर लालची और "अधिकार" परिमाणकों, backreferences, \Q\E उद्धरण, और (?...) में से कई गैर-कैप्चरिंग समूह, शून्य-चौड़ाई वाले लुकहेड/पीछे, और गैर-बैकट्रैकिंग समूह समेत हैं। वास्तव में जावा regexes libpcre करता है की तुलना में पर्ल regexes के साथ आम बात में प्रतीत होता है। :)

जावास्क्रिप्ट भाषा पर्ल से प्राप्त रेगेक्स का भी उपयोग करती है; यूनिकोड कक्षाएं, देखो, स्वामित्व वाले क्वांटिफायर, और गैर-बैकट्रैकिंग समूह अनुपस्थित हैं, लेकिन जावा के लिए मैंने जो कुछ भी उल्लेख किया है वह जेएस में भी मौजूद है।

पायथन के regex वाक्य रचना भी पर्ल 5 के पर आधारित है, गैर लालची परिमाणकों साथ, गैर कब्जा समूहों, देखो आगे/पीछे और सशर्त पैटर्न, साथ ही नामित कैप्चर समूहों सहित (?...) निर्माणों के सबसे (लेकिन एक साथ पर्ल या पीसीआरई से अलग वाक्यविन्यास)। गैर-बैकट्रैकिंग समूह और 'स्वामित्व' क्वांटिफायर (जहां तक ​​मैं देख सकता हूं) अनुपस्थित हैं, जैसे \p और \P यूनिकोड वर्ण वर्ग, हालांकि मानक \d, \s, और \w कक्षाएं अनुरोध किए जाने पर यूनिकोड-जागरूक हैं।

+0

धन्यवाद। मैंने यह दिखाने के लिए अपने प्रश्न को स्पष्ट किया है कि मुझे उन सुविधाओं में दिलचस्पी है जो जावा 1.6 –

+0

पर्ल, पायथन, .NET, libpcre का समर्थन नहीं करता है। वे एकमात्र कार्यान्वयन हैं जिन्हें मैं कैप्चर समूहों नामक समर्थन के बारे में जानता हूं। – hobbs

+0

असल में पाइथन एक्सटेंशन के कई आधुनिक पर्ल पर काम करेंगे। –

0

मुझे आश्चर्य है कि क्या वे [पीसीआरई] सभी प्रमुख भाषाओं में एक वास्तविक दृष्टिकोण बनने की संभावना है (मुझे जावा में रूचि है)।

यह अटकलों के लिए कहता है, लेकिन मुझे लगता है कि उत्तर जावा के मामले में नहीं है ... मैं इस तथ्य पर आधारित हूं कि मुझे जावा के लिए सार्थक पीसीआरई कार्यान्वयन नहीं मिल रहा है। (बेशक java.util.regex के अलावा।)

अगर वहाँ एक असली जरूरत/जावा में PCRE की मांग के लिए था, मैं वहाँ उम्मीद करता हूँ वहाँ बाहर अधिक पुस्तकालयों किया जाना है।

-2

यह "एक्स एक्स वन ट्रू वे!" जैसा लगता है सवाल का प्रकार पीसीआरई में कई कमियां हैं, जिनमें से सबसे स्पष्ट है कि यह जटिलता और संदिग्ध उपयोगिता है। शायद ही कभी किसी भी चीज़ के लिए एक एक सही तरीका मौजूद है, और regexp पुस्तकालयों के दायरे में, पीसीआरई निश्चित रूप से यह नहीं है।

पर्ल नियमित अभिव्यक्ति मेरी राय में पूरी तरह से जंक हैं। एक बार जब आप POSIX विस्तारित regexps (ईआरई) द्वारा पेश किए गए फीचर-सेट से काफी अधिक हो जाते हैं, तो आप पीईजी कार्यान्वयन की तरह कुछ भी उपयोग कर सकते हैं।पीसीआरई का एकमात्र कारण इतनी व्यापक रूप से उपयोग किया जाता है क्योंकि लोगों के लिए पुस्तकालय में बस छोड़कर समस्या हल करना आसान होता है।

0

इस मैच से दूर एक विभाजन करने का प्रयास करें:

(?: 
    (?:'[\S\s]*?(?<!\\)') # Consume characters inside of a quoted string 
    |(?:\/\*[\S\s]*?\*\/) # Consume multi-line comments 
    |(?m:\/{2}[^\n]*$\n) # Consume single-line comments 
)(*SKIP)(*F)   # Fail match if any of the previous matches were found 
|(?<=;)     # Capture position right after semicolon 

'एक्स' और 'जी' का उपयोग सुनिश्चित करें (यदि आवश्यक हो) संशोधक (रों)।

Example

+1

आप इसे '(? X: 'के साथ शुरू करके/x ध्वज को फिर से जोड़ सकते हैं – shawnhcorey

संबंधित मुद्दे