रेगुलर एक्सप्रेशंस (RegExp)
VBA में स्ट्रिंग प्रोसेसिंग के लिए रेगुलर एक्सप्रेशंस (RegExp) बहुत शक्तिशाली हैं। जटिल पैटर्न मैचिंग, वैलिडेशन और टेक्स्ट ट्रांसफॉर्मेशन के लिए RegExp आवश्यक है।
RegExp कब उपयोग करें
- इनपुट वैलिडेशन: ईमेल, फोन नंबर, पिन कोड जांच
- डेटा एक्सट्रैक्शन: टेक्स्ट से विशिष्ट पैटर्न निकालना
- जटिल रिप्लेस: पैटर्न-आधारित टेक्स्ट परिवर्तन
- लॉग पार्सिंग: तारीख, IP एड्रेस निकालना
- डेटा क्लीनिंग: अनावश्यक कैरेक्टर हटाना
RegExp ऑब्जेक्ट बनाना
CreateObject का उपयोग (अनुशंसित)
Sub RegExpBanaye()
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\d+"
Debug.Print re.Test("abc123") ' True
End Sub
RegExp प्रॉपर्टीज
| प्रॉपर्टी | विवरण | डिफ़ॉल्ट |
|---|---|---|
| Pattern | सर्च पैटर्न | कोई नहीं |
| Global | सभी मैच खोजें | False |
| IgnoreCase | केस इग्नोर करें | False |
Pattern प्रॉपर्टी
Sub PatternUdaharan()
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
' अंक पैटर्न
re.Pattern = "\d+"
Debug.Print re.Test("ऑर्डर123") ' True
' ईमेल पैटर्न
re.Pattern = "[\w\.-]+@[\w\.-]+\.\w+"
Debug.Print re.Test("test@example.com") ' True
End Sub
Global प्रॉपर्टी
Sub GlobalUdaharan()
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\d+"
' Global = False: केवल पहला मैच
re.Global = False
Dim matches As Object
Set matches = re.Execute("abc123def456")
Debug.Print "Global=False: " & matches.Count ' 1
' Global = True: सभी मैच
re.Global = True
Set matches = re.Execute("abc123def456")
Debug.Print "Global=True: " & matches.Count ' 2
End Sub
RegExp मेथड्स
| मेथड | विवरण | रिटर्न टाइप |
|---|---|---|
| Test | पैटर्न मैच जांचें | Boolean |
| Execute | मैच स्ट्रिंग प्राप्त करें | MatchCollection |
| Replace | मैच स्ट्रिंग बदलें | String |
Test मेथड
Sub TestMethodUdaharan()
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
' फोन नंबर फॉर्मेट (xxx-xxx-xxxx)
re.Pattern = "^\d{3}-\d{3}-\d{4}$"
Debug.Print re.Test("555-123-4567") ' True
Debug.Print re.Test("555-1234-567") ' False
End Sub
Execute मेथड
Sub ExecuteMethodUdaharan()
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\d+"
re.Global = True
Dim matches As Object
Set matches = re.Execute("ऑर्डर123 में 45 आइटम")
Debug.Print "मैच: " & matches.Count
Dim match As Object
For Each match In matches
Debug.Print "मूल्य: " & match.Value
Next match
End Sub
Replace मेथड
Sub ReplaceMethodUdaharan()
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "\d+"
re.Global = True
Dim result As String
result = re.Replace("ऑर्डर123 में 45 आइटम", "X")
Debug.Print result ' ऑर्डरX में X आइटम
End Sub
सामान्य पैटर्न सिंटैक्स
| पैटर्न | विवरण | उदाहरण |
|---|---|---|
\d | कोई भी अंक (0-9) | \d+ “123” मैच करता है |
\w | वर्ड कैरेक्टर | \w+ “abc” मैच करता है |
\s | व्हाइटस्पेस | \s+ स्पेस मैच करता है |
. | कोई भी कैरेक्टर | a.c “abc” मैच करता है |
* | शून्य या अधिक | ab*c “ac” मैच करता है |
+ | एक या अधिक | ab+c “abc” मैच करता है |
? | शून्य या एक | ab?c “ac” मैच करता है |
^ | स्ट्रिंग की शुरुआत | ^नमस्ते शुरू में मैच |
$ | स्ट्रिंग का अंत | दुनिया$ अंत में मैच |
प्रैक्टिकल उदाहरण
ईमेल वैलिडेशन
Function KyaEmailVaidh(email As String) As Boolean
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "^[\w\.-]+@[\w\.-]+\.\w{2,}$"
re.IgnoreCase = True
KyaEmailVaidh = re.Test(email)
End Function
Sub TestEmailValidation()
Debug.Print KyaEmailVaidh("user@example.com") ' True
Debug.Print KyaEmailVaidh("invalid@") ' False
End Sub
फोन नंबर फॉर्मेटिंग
Function PhoneFormat(phone As String) As String
Dim re As Object
Set re = CreateObject("VBScript.RegExp")
' सभी गैर-अंक हटाएं
re.Pattern = "\D"
re.Global = True
Dim digits As String
digits = re.Replace(phone, "")
' 10 अंक होने पर फॉर्मेट करें
If Len(digits) = 10 Then
PhoneFormat = Left(digits, 3) & "-" & _
Mid(digits, 4, 3) & "-" & _
Right(digits, 4)
Else
PhoneFormat = phone
End If
End Function
VBScript.RegExp की सीमाएं
VBScript.RegExp JavaScript जैसे रेगुलर एक्सप्रेशन इंजन का उपयोग करता है, जिसमें अन्य भाषाओं की तुलना में कुछ सीमाएं हैं:
- Lookbehind (
(?<=...)/(?<!...)) समर्थित नहीं है (lookahead(?=...)/(?!...)समर्थित है) - नामित कैप्चर ग्रुप (
(?<name>...)) समर्थित नहीं हैं \wकेवल ASCII अक्षरों, अंकों और अंडरस्कोर से मेल खाता है, इसलिए हिंदी (देवनागरी) जैसे अक्षर मैच नहीं होते- यह केवल Windows संस्करण के Office में काम करता है। Mac के VBA में
CreateObject("VBScript.RegExp")काम नहीं करता
Microsoft ने VBScript को चरणबद्ध तरीके से हटाने की घोषणा की है। चूंकि VBScript.RegExp VBScript इंजन की ही DLL (vbscript.dll) में शामिल है, यदि Windows से VBScript हटा दिया गया तो VBA से यह उपलब्ध नहीं रह सकता। लंबे समय तक चलने वाले मैक्रो में रेगुलर एक्सप्रेशन लॉजिक को अलग फ़ंक्शन में रखें ताकि बाद में बदलना आसान हो।
Replace भी Global से प्रभावित होता है। डिफ़ॉल्ट False में केवल पहला मैच बदला जाता है, इसलिए सभी बदलने के लिए Global = True सेट करें। MultiLine = True होने पर ^ और $ प्रत्येक पंक्ति की शुरुआत और अंत से मेल खाते हैं।
सारांश
| मेथड | उपयोग |
|---|---|
| Test | त्वरित वैलिडेशन |
| Execute | सभी मैच प्राप्त करें |
| Replace | पैटर्न-आधारित परिवर्तन |
रेगुलर एक्सप्रेशंस जटिल स्ट्रिंग प्रोसेसिंग के लिए अत्यंत शक्तिशाली हैं।