2010-01-14 6 views
12

में मुझे एक नियमित अभिव्यक्ति की आवश्यकता है जो यूटीएफ -8 अक्षरों और अंकों से मेल खाता है, डैश साइन (-) लेकिन अंडरस्कोर (_) से मेल नहीं खाता है, I सफलता के बिना इन मूर्खतापूर्ण प्रयास करने की कोशिश की:RegEx: w - "_" + "-" यूटीएफ -8

  • ([\w-^_])+
  • ([\w^_]-?)+
  • (\w[^_]-?)+

\w आशुलिपि च है या [A-Za-z0-9_], लेकिन अगर यह u संशोधक सेट है तो यह यूटीएफ -8 वर्णों से भी मेल खाता है।

क्या कोई इस के साथ मेरी मदद कर सकता है?

+1

कृपया "यूटीएफ -8 अक्षरों" के बारे में विशिष्ट रहें - क्या आप पुष्टि कर सकते हैं कि आप केवल अंग्रेजी वर्ण नहीं चाहते हैं? –

+0

@meder: मुझे अंग्रेजी ** और ** उच्चारण/विदेशी पात्र चाहिए। –

उत्तर

17

इस प्रयास करें:

(?:[\w\-](?<!_))+ 

यह है कुछ भी पर एक साधारण मैच है कि एक \ w (या एक पानी का छींटा) के रूप में एन्कोड है और फिर एक शून्य चौड़ाई lookbehind सुनिश्चित करता है कि चरित्र है कि बस मिलान किया गया है अंडरस्कोर नहीं है।

नहीं तो आप ले सकता है इस एक:

(?:[^_\W]|-)+ 

जो है एक और अधिक सेट-आधारित दृष्टिकोण (अपरकेस डब्ल्यू ध्यान दें)

ठीक है, मैं के php के स्वाद में यूनिकोड के साथ बहुत मज़ा किया था PCREs: डी लुका छिपी का कहना है वहाँ एक सरल उपाय उपलब्ध है:

[\p{L}\p{N}\-]+ 

\ p {एल} कुछ भी यूनिकोड कि (ध्यान दें एक पत्र के रूप में उत्तीर्ण मेल खाता है: नहीं एक शब्द चरित्र, इस प्रकार कोई अंडरस्कोर नहीं), जबकि \ p {N} किसी भी संख्या से मेल खाता है (रोमन अंकों और अधिक विदेशी चीजों सहित)।
\ - बस एक बच निकला डैश है। अत्यंत आवश्यक होता हालांकि नहीं है, मैं यह चरित्र वर्गों में डैश से बचने के लिए एक बिंदु बनाने के लिए ... नोट करते हैं, वहाँ यूनिकोड में विभिन्न डैश के दर्जनों है, इस प्रकार निम्न संस्करण को जन्म दे रही हैं कि:

[\p{L}\p{N}\p{Pd}]+ 

कहाँ " पीडी "विराम चिह्न डैश है, जिसमें हमारे minus-dash-thingy सहित, लेकिन इतनी ही सीमित नहीं है। (नोट, फिर कोई अंडरस्कोर नहीं)।

+0

\ N में हाइपन शामिल नहीं करेगा? – codaddict

+0

@dionadar - यह मेरे लिए उच्चारण वर्णों से मेल नहीं खाता है। –

+1

@ कोडाडिक्ट जहाँ तक मुझे पता है, हाइफ़न \ w में शामिल नहीं है - और यहां तक ​​कि यदि यह भी था, तो यह इस तरह के राज्य को चोट पहुंचाने में कोई दिक्कत नहीं होगी;) –

3

मुझे यकीन नहीं है कि आप किस भाषा का उपयोग करते हैं, लेकिन PERL में आप बस लिख सकते हैं: [[: alnum:] -] + जब सही लोकेल सेट किया जाता है।

+0

यह जानना अच्छा है, लेकिन मैं PHP (पीसीआरई इंजन) का उपयोग कर रहा हूं। –

+0

इसे PHP और रूबुलर (रूबी) में आज़माएं, http://www.rubular.com/regexes/12922 और http://www.rubular.com/regexes/12923 देखें। –

+0

मैंने वहां एक छोटी गलती को सही किया है। –