हां, यह [[:digit:]]
~ [0-9]
~ है \d
(जहां ~ का मतलब है अनुलोम विलोम)।
सबसे प्रोग्रामिंग भाषाओं (जहां यह समर्थित है) में \d
≡ [[:digit:]]
(समान)।
की \d
तुलना में कम सामान्य है [[:digit:]]
(POSIX में नहीं है लेकिन यह GNU में है grep -P
)।
उदाहरण के लिए, UNICODE में कई अंक हैं :
123456789 # Hindu-Arabic
अरबी अंक
٠١٢٣٤٥٦٧٨٩ # ARABIC-INDIC
۰۱۲۳۴۵۶۷۸۹ # EXTENDED ARABIC-INDIC/PERSIAN
߀߁߂߃߄߅߆߇߈߉ # NKO DIGIT
०१२३४५६७८९ # DEVANAGARI
जो सब के सब शामिल किया जा सकता में [[:digit:]]
या \d
।
इसके बजाय, [0-9]
आम तौर पर केवल ASCII अंक होते हैं 0123456789
।
कई भाषाएं हैं: पर्ल, जावा, पायथन, सी। जिसमें [[:digit:]]
(और \d
) विस्तारित अर्थ के लिए कॉल करता है। उदाहरण के लिए, यह पर्ल कोड ऊपर से सभी अंकों से मेल खाएगा:
$ a='0123456789 ٠١٢٣٤٥٦٧٨٩ ۰۱۲۳۴۵۶۷۸۹ ߀߁߂߃߄߅߆߇߈߉ ०१२३४५६७८९'
$ echo "$a" | perl -C -pe 's/[^\d]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
जो उन सभी वर्णों का चयन करने के लिए समान है जिनमें यूनिकोड के गुण हैं Numeric
और digits
:
$ echo "$a" | perl -C -pe 's/[^\p{Nd}]//g;' ; echo
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९
किस grep को पुन: उत्पन्न किया जा सकता है (पीसीआर के विशिष्ट संस्करण में पर्ल की तुलना में संख्यात्मक कोड बिंदुओं की एक अलग आंतरिक सूची हो सकती है):
$ echo "$a" | grep -oP '\p{Nd}+'
0123456789
٠١٢٣٤٥٦٧٨٩
۰۱۲۳۴۵۶۷۸۹
߀߁߂߃߄߅߆߇߈߉
०१२३४५६७८९
इसे देखने के लिए [0-9] में बदलें:
$ echo "$a" | grep -o '[0-9]\+'
0123456789
POSIX
विशिष्ट POSIX BRE या ERE के लिए: (इसे POSIX में नहीं बल्कि जीएनयू में है समर्थित नहीं है )।
POSIX द्वारा डिजिट कैरेक्टर क्लास के अनुरूप होना आवश्यक है, जिसके बदले ISO C को अक्षर 0 से 9 होना चाहिए और कुछ नहीं। तो केवल सी में स्थान में सब , , और बिल्कुल वैसा ही मतलब है। कोई संभव गलत व्याख्याओं है, अधिक उपयोगिताओं में उपलब्ध है और यह केवल मतलब के लिए आम है । कुछ उपयोगिताओं द्वारा समर्थित है।
\d
grep -P
[[:digit:]]
[0-9]
[0123456789]
\d
[[:digit:]]
[0123456789]
[[:digit:]]
[0123456789]
\d
के रूप में [0-9]
, श्रेणी के भाव का अर्थ केवल सी लोकेल में पोसिक्स द्वारा परिभाषित किया गया है; अन्य स्थानों में यह अलग हो सकता है (कोडपॉइंट ऑर्डर या कोलाजेशन ऑर्डर या कुछ और हो सकता है)।
गोले
कुछ कार्यान्वयन सादे ASCII आदेश (उदाहरण के लिए ksh93) की तुलना में कुछ अलग होने की सीमा को समझ सकते हैं:
$ LC_ALL=en_US.utf8 ksh -c 'a="'"$a"'";echo "${a//[0-9]}"'
۹ ߀߁߂߃߄߅߆߇߈߉ ९
और यह बग का एक निश्चित स्रोत है।