1. Tải bản cài đặt AutoIT mới nhất

    Chào Khách. Nếu bạn mới tham gia và chưa cài đặt AutoIT.
    Vui lòng vào topic trên để tải bản AutoIT mới nhất nhé
    Dismiss Notice
  2. Quy định và nội quy

    Chào Khách. Vui lòng đọc kỹ nội quy và quy định của diễn đàn
    Để tránh bị ban một cách đáng tiếc nhé!
    Dismiss Notice
  3. Hướng dẫn chèn mã AutoIT trong diễn đàn

    Chào Khách. Vui lòng xem qua bài viết này
    Để biết cách chèn mã AutoIT trong diễn đàn bạn nhé :)
    Dismiss Notice

Hỏi đáp Xin hỏi về StringRegExpReplace một cái string dạng URL

Thảo luận trong 'Thảo luận chung - Hỏi đáp' bắt đầu bởi Giang, 16/6/19.

  1. Giang

    Giang Thành viên mới
    • 3/6

    Tham gia ngày:
    11/1/16
    Bài viết:
    9
    Đã được thích:
    4
    Mình có 1 đoạn code như sau :

    Mã (AutoIt):
    $Input_Link = "http://www.about15.com/page/10/"

    For $i = 1 To 10
        Dim $Split_Link_Find_Number = StringSplit($Input_Link, "/")
        For $a = 1 To $Split_Link_Find_Number[0]
            If StringIsDigit($Split_Link_Find_Number[$a]) = 1 Then
                $Page_Old = $Split_Link_Find_Number[$a]
                $Page_New = $Split_Link_Find_Number[$a] + $i
            EndIf
        Next
        $NewLink = StringRegExpReplace($Input_Link,$Page_Old,$Page_New)
        MsgBox(0, "", $NewLink)
    Next

    Ok - Nếu ở dưới cùng page = 10 thì mọi thứ đều ngon lành .. nhưng nếu page = 1 lỗi !
    Ai giúp mình với !
     
  2. #Rainy# Hoàng Vũ IT

    #Rainy# Hoàng Vũ IT Hoàng Vũ IT Moderator
    • 43/45

    Tham gia ngày:
    21/11/16
    Bài viết:
    404
    Đã được thích:
    122
    1. Nếu đã là lỗi thì nên post lỗi lên.
    2. thứ bạn cần kp là StringRegexpReplace mà là Stringreplace.
    3. Mình test code k thấy lỗi chỗ nào. cho 0,1,10,11 bth hết
     
  3. Giang

    Giang Thành viên mới
    • 3/6

    Tham gia ngày:
    11/1/16
    Bài viết:
    9
    Đã được thích:
    4
    [​IMG]
    Hình như bạn không nhìn ra
    Nếu $Input_Link="http://www.about15.com/page/1/" Thì khi sang vòng 2 3 4 5 nó sẽ tự cộng cả about15 thành 25 35 45 55
    Và hơn hết StringReplace mắc lỗi đó nên phải chuyển sang StringRegexpReplace nhưng do không chuyên xài nên không rõ xử lý ntn !
    Trong phần StringReplace đã ghi rõ :
    Theo mặc định hoặc nếu sự cố xảy ra là tích cực, việc tìm kiếm / thay thế được thực hiện từ trái sang phải. Do đó, StringReplace ("aaa", "aa", "bb") trả về "bba" -- Áp dụng vào đây sẽ bị lỗi tương tự !
    Còn code của mình chạy tốt khi page không phải số 1 mà bắt đầu từ 2 !
     
  4. Only Love

    Only Love Thành viên
    • 18/23

    Tham gia ngày:
    8/9/15
    Bài viết:
    69
    Đã được thích:
    59
    code như thế này cho gọn bạn:
    Mã (AutoIt):
    #include <Array.au3>
    $Input_Link = "http://www.about15.com/page/1/"
    $Input_Link = StringRegExp($Input_Link, '^(.+\/)(\d+)\/?$', 3)
    _ArrayDisplay($Input_Link)
    For $i = 1 To 10
        $NewLink = $Input_Link[0] & ($Input_Link[1] + $i) & '/'
        MsgBox(0, "", $NewLink)
    Next
     
    Giang thích bài này.
  5. #Rainy# Hoàng Vũ IT

    #Rainy# Hoàng Vũ IT Hoàng Vũ IT Moderator
    • 43/45

    Tham gia ngày:
    21/11/16
    Bài viết:
    404
    Đã được thích:
    122
    Mã (AutoIt):
    $Input_Link = "http://www.about15.com/page/10/"

    For $i = 1 To 10
        Dim $Split_Link_Find_Number = StringSplit($Input_Link, "/")
        For $a = 1 To $Split_Link_Find_Number[0]
            If StringIsDigit($Split_Link_Find_Number[$a]) = 1 Then
                $Page_Old = $Split_Link_Find_Number[$a]
                $Page_New = $Split_Link_Find_Number[$a] + $i
            EndIf
        Next
        $NewLink = StringReplace($Input_Link, '/' & $Page_Old & '/', '/' & $Page_New & '/')
        MsgBox(0, "", $NewLink)
    Next
    Đây là code làm theo kiểu của bạn. Mình nghĩ bạn nên làm theo cách bạn trên
     
  6. Giang

    Giang Thành viên mới
    • 3/6

    Tham gia ngày:
    11/1/16
    Bài viết:
    9
    Đã được thích:
    4
    Lâu không làm nên không nhớ
    Thêm 2 dấu / vào để nó nhận ra cũng là 1 ý hay .. nhưng đang tìm phương pháp giải quyết vụ chỉ = số :) chắc phải ngâm cứu cái StringRegExp vậy :)
     
  7. Giang

    Giang Thành viên mới
    • 3/6

    Tham gia ngày:
    11/1/16
    Bài viết:
    9
    Đã được thích:
    4
    '^(.+\/)(\d+)\/?$'
    Giải thích hộ mình cái đoạn ký tự này với :) mới sơ sơ mấy cái ( ) là nhóm còn mấy cái kia chưa hiểu rõ lắm :) tks bạn
     
  8. #Rainy# Hoàng Vũ IT

    #Rainy# Hoàng Vũ IT Hoàng Vũ IT Moderator
    • 43/45

    Tham gia ngày:
    21/11/16
    Bài viết:
    404
    Đã được thích:
    122
    ^ là đầu chuỗi. $ là cuối chuỗi.
    (.+\/) = dấu . tức là cái gì cũng đc, + là nhiều cái gì cx đc \/ là dấu /. tổng lại có nghĩa là nhiều cái gì đó rồi đến dấu /
    (\d+) = \d là chữ số, + là nhiều chữ số.
    \/ là dấu / tức là có dấu / ở cuối thôi.
    những cái trong () là lấy. có 2 cái ngoặc thì mảng sẽ có 2 phần tử.
     

Chia sẻ trang này

Đang tải...