Regex จับคู่ข้อมูลหลายรายการใน URL สำหรับกฎการเขียนซ้ำของ IIS

ฉันต้องการความช่วยเหลือเกี่ยวกับรูปแบบ regex สำหรับการเขียน URL ใหม่ โครงสร้าง URL ของฉันคือ:

http://domain.com/[username]/[token]/[userid]/

ประเภทข้อมูลคือ:

  • ชื่อผู้ใช้ = ตัวอักษรและตัวเลข
  • โทเค็น = ตัวอักษรและตัวเลข
  • รหัสผู้ใช้ = ตัวเลข

ตัวอย่างที่มีข้อมูล:

http://domain.com/john1975/aBc123/123456789/

ด้วยการใช้นิพจน์ทั่วไป ฉันพยายามรับข้อมูลอ้างอิงสำหรับข้อมูลแต่ละชิ้น ดังนั้นฉันจึงสามารถเขียนใหม่ไปที่:

index.asp?username={R:1}&token={R:2}&userid={R:3}

โปรดทราบว่า regex ไม่ควรโลภเกินไป ดังนั้นฉันจึงยังสามารถเข้าถึงไฟล์ต่างๆ เช่น:

http://domain.com/about.asp
http://domain.com/images/logo.png

regex ที่ฉันได้ลองคือ:

^[0-9a-z]+/[0-9a-z]+/[0-9]+$

สิ่งนี้ไม่ตรงกับ URL ตัวอย่างของฉัน


person RandomCoder    schedule 27.09.2013    source แหล่งที่มา


คำตอบ (1)


คุณไม่มีเครื่องหมายทับต่อท้าย regex ควรเป็น:

^([0-9a-z]+)/([0-9a-z]+)/([0-9]+)/$

ฉันสมมติว่าคุณกำลังตั้งค่าสถานะมันไม่คำนึงถึงขนาดตัวพิมพ์ ถ้าไม่เช่นนั้นคุณต้อง

^([0-9a-zA-Z]+)/([0-9a-zA-Z]+)/([0-9]+)/$

คุณต้องมีวงเล็บเพื่อให้เรียกการอ้างอิงกลับได้ ซึ่งผิดเช่นกัน คุณต้องการจับคู่ 1,2 และ 3 ไม่ใช่ 0 ซึ่งเป็นการจับคู่ของนิพจน์ทั้งหมด พวกเขาควรอ่าน:

index.asp?username={R:1}&token={R:2}&userid={R:3}
person alergy    schedule 27.09.2013
comment
ขอบคุณสำหรับความช่วยเหลือ สิ่งนี้ตรงกับ URL ตัวอย่างของฉัน แต่ใส่ทุกอย่างไว้ในการอ้างอิงแรก ดังนั้นฉันจึงลงท้ายด้วย: index.asp?username=john1975/aBc123/123456789/&token=&userid= ฉันจะรับข้อมูลอ้างอิงแยกต่างหากด้วย IIS ที่เขียนใหม่ได้อย่างไร - person RandomCoder; 27.09.2013
comment
ฮ่า ฉันรู้แล้วและเพิ่งแก้ไขคำตอบของฉันเพื่อรวมสิ่งนั้นไว้ด้วย - โปรดทราบว่าคุณต้องยึดส่วนของกฎที่คุณต้องการแยกออกมา R:0 หมายถึงทั้งหมด จากนั้น R:1 ฯลฯ หมายถึงการจับคู่เฉพาะที่ระบุโดยลำดับที่วงเล็บเกิดขึ้น - person alergy; 27.09.2013