ฉันจะสร้างนิพจน์ทั่วไปที่ตรวจพบเลขฐานสิบหกในข้อความได้อย่างไร
ตัวอย่างเช่น '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3' และ '8BADF00D'
ฉันจะสร้างนิพจน์ทั่วไปที่ตรวจพบเลขฐานสิบหกในข้อความได้อย่างไร
ตัวอย่างเช่น '0x0f4', '0acdadecf822eeff32aca5830e438cb54aa722e3' และ '8BADF00D'
คำตอบ:
ต่อไปนี้เป็นอย่างไร?
0[xX][0-9a-fA-F]+
จับคู่นิพจน์ที่เริ่มต้นด้วย 0 ตามด้วย x ต่ำกว่าหรือตัวพิมพ์ใหญ่ตามด้วยอักขระหนึ่งตัวขึ้นไปในช่วง 0-9 หรือ af หรือ AF
/0x[\da-f]/i
ได้ แต่อย่างอื่นคือ +1
ไวยากรณ์ที่แน่นอนขึ้นอยู่กับข้อกำหนดและภาษาโปรแกรมของคุณ แต่โดยพื้นฐานแล้ว:
/[0-9a-fA-F]+/
หรือมากกว่านั้นi
ทำให้ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่
/[0-9a-f]+/i
หากคุณโชคดีพอที่จะใช้ Ruby คุณสามารถทำได้:
/\h+/
แก้ไข - คำตอบของ Steven Schroeder ทำให้ฉันรู้ว่าฉันเข้าใจบิต 0x ผิดดังนั้นฉันจึงอัปเดตคำแนะนำตามนั้น หากคุณต้องการจับคู่ 0x ด้วยสิ่งที่เทียบเท่าคือ
/0[xX][0-9a-fA-F]+/
/0x[0-9a-f]+/i
/0x[\h]+/i
เพิ่มมากขึ้น - หากต้องการ 0x เป็นทางเลือก (ตามที่คำถามมีนัย):
/(0x)?[0-9a-f]+/i
ไม่ใช่เรื่องใหญ่ แต่เอ็นจิ้น regex ส่วนใหญ่รองรับคลาสอักขระ POSIX และมี[:xdigit:]
สำหรับการจับคู่อักขระเลขฐานสิบหกซึ่งง่ายกว่า0-9a-fA-F
สิ่งทั่วไป
ดังนั้น regex ตามที่ร้องขอ (เช่นกับทางเลือก0x
) คือ:/(0x)?[[:xdigit:]]+/
เป็นที่น่าสังเกตว่าการตรวจจับ MD5 (ซึ่งเป็นหนึ่งในตัวอย่าง) สามารถทำได้ด้วย:
[0-9a-fA-F]{32}
จะจับคู่โดยมีหรือไม่มี0x
คำนำหน้า
(?:0[xX])?[0-9a-fA-F]+
หากคุณใช้ Perl หรือ PHP คุณสามารถแทนที่
[0-9a-fA-F]
กับ:
[[:xdigit:]]
สำหรับบันทึกฉันจะระบุสิ่งต่อไปนี้:
/^[xX]?[0-9a-fA-F]{6}$/
ซึ่งแตกต่างในการที่จะตรวจสอบว่ามันมีจะมีหกตัวอักษรที่ถูกต้องและตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ x ในกรณีที่เรามีหนึ่ง
หากคุณกำลังมองหาอักขระเลขฐานสิบหกที่เฉพาะเจาะจงตรงกลางสตริงคุณสามารถใช้ "\ xhh" โดยที่ hh คืออักขระในเลขฐานสิบหก ฉันได้ลองและได้ผล ฉันใช้ framework สำหรับ C ++ Qt แต่มันสามารถแก้ปัญหาได้ในกรณีอื่น ๆ ขึ้นอยู่กับรสชาติที่คุณต้องการใช้ (php, javascript, python, golang ฯลฯ )
คำตอบนี้นำมาจาก: http://ult-tex.net/info/perl/
อันนี้ทำให้แน่ใจว่าคุณมีคู่ที่ถูกต้องไม่เกินสามคู่:
(([a-fA-F]|[0-9]){2}){3}
ไม่สามารถจับคู่อักขระที่ถูกต้องมากกว่าหรือน้อยกว่าสามคู่
อีกตัวอย่างหนึ่ง: ค่าเลขฐานสิบหกสำหรับสี css เริ่มต้นด้วยเครื่องหมายปอนด์หรือแฮช (#) ตามด้วยอักขระหกตัวที่อาจเป็นตัวเลขหรือตัวอักษรระหว่าง A และ F ได้
^#[0-9a-fA-F]{6}
ในกรณีที่คุณต้องการสิ่งนี้ภายในอินพุตที่ผู้ใช้สามารถพิมพ์0
และ0x
เช่นกัน แต่ไม่ใช่เลขฐานสิบหกที่ไม่มี0x
คำนำหน้า:
^0?[xX]?[0-9a-fA-F]*$