2016-06-29 1 views
2

내가 보내는 전자 메일에 대한 링크를 자동으로 추가하는 Outlook 용 VBA 스크립트를 작성하려고합니다. 일반적인 이메일은 다음과 같습니다.Outlook VBA RegEx 하위 표현식을 사용할 수 없습니다.

안녕하세요. 주문 12345가 불완전한 것으로 보입니다. 특히 몇 개의 위젯을 구매하려고 했습니까? 주문 12345를 올바른 위젯 수량으로 업데이트하십시오. 고맙습니다.

어디서나 "주문 12345"가 나타나고 http://something.com/order.html?o=12345에 대한 링크를 삽입하고 싶습니다. 이메일 형식이 변경 될 수 있으며 주문 번호가 변경 될 수 있습니다. "주문"의 모든 인스턴스와 웹 사이트의 적절한 주문 페이지로 연결되는 번호가 필요합니다.

RegEx는 명백한 답변처럼 보입니다. 하지만 대신에,

Sub Add_Order_Links() 
    Dim miMessage As Outlook.MailItem 
    Dim rgx As New RegExp 
    Dim strPattern As String 
    Dim strBody As String 
    Dim strReplace As String 

    strPattern = "Order \d+" 
    strReplace = "<a href='http://something.com/order.html\?o=$1'>Order $1</a>" 

    Set miMessage = Application.ActiveInspector.CurrentItem 
    If miMessage Is Nothing Then Exit Sub 
    strBody = miMessage.HTMLBody 
    rgx.Pattern = strPattern 
    rgx.Global = True 
    rgx.IgnoreCase = True 
    miMessage.HTMLBody = rgx.Replace(strBody, strReplace) 
End Sub 

스크립트는 일치 발견 "주문을 12345"인스턴스 정확하고 링크를 삽입 : 내 프로젝트에 마이크로 소프트 VBScript 정규 표현식 5.5 라이브러리를 활성화 및 서면 https://msdn.microsoft.com/en-us/library/k9z80300(v=vs.84).aspx에 따라 다음 코드를했습니다 "Order 12345"URL에 "Order $ 1"및? o = $ 1이 표시됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

2

정규식에 capturing group이 없으면 back-reference에 아무 것도 없습니다.

변경이이에

strPattern = "Order \d+" 

:

strPattern = "Order (\d+)" 

하고 문제가 사라집니다.

+1

흥미 롭습니다. 나는'(Order) \ s (\ d +)'와 함께 공백을 명시 적으로 만들 것이라고 생각한다. 왜냐하면 나는 그룹을 좋아하기 때문이다. 좋은 대답, 내게 뭔가 가르쳐 =) –