← เครื่องมือทั้งหมด

ทดสอบ Regex

สร้าง ทดสอบ และแก้ไขนิพจน์ทั่วไปแบบเรียลไทม์กับข้อความของคุณในเบราว์เซอร์ เรียนรู้คลาสอักขระ ตัวกำหนดปริมาณ สมอ กลุ่ม และแฟล็ก

Regex Tester: สร้างและดีบัก pattern กับข้อความของคุณเอง

Regular expression คือภาษาเล็กๆ สำหรับอธิบายรูปร่างของข้อความ แทนที่จะถามว่า "มีคำนี้อยู่ที่นี่ไหม?" regex ช่วยให้คุณถามว่า "มีสตริงที่มีลักษณะแบบนี้ไหม?" นั่นแหละที่ทำให้มันทรงพลังสำหรับการค้นหา ตรวจสอบ ดึงข้อมูล และแทนที่ข้อความใน code editor ไฟล์ log form inputs และ scripts มันยังเป็นเหตุให้ทำผิดพลาดได้ง่ายด้วย เพราะ pattern ที่อ่านแล้วดูสมเหตุสมผลในหัวของคุณอาจ match มากเกินไป น้อยเกินไป หรือไม่ match เลยอย่างเงียบๆ

นั่นคือเหตุที่การทดสอบแบบ interactive ดีกว่าการเดา เมื่อคุณพิมพ์ pattern แล้วดู match ปรากฏในข้อความตัวอย่างจริงๆ คุณได้รับ feedback ทันที เห็นว่าจับได้อะไร ตัวไหนหลุดไป และ capture group ใดจับส่วนไหน Regex Tester ของเราทำงานทั้งหมดในเบราว์เซอร์ของคุณ Pattern และข้อความตัวอย่างของคุณไม่ออกจากหน้าเลย คุณจึงวาง log lines, อีเมล หรือข้อมูล production ได้โดยไม่ต้องส่งอะไรไปยังเซิร์ฟเวอร์

ตัวกรองไซยานเรืองแสงกำลังจับ token ทองจำเพาะจากกระแสข้อมูลบนพื้นหลังสีครามเข้ม
Regex ทำหน้าที่เหมือนตัวกรอง คัดเลือกเฉพาะ token ที่ตรงกับ pattern ของคุณ

ส่วนประกอบพื้นฐานที่ควรรู้

Pattern ในชีวิตประจำวันส่วนใหญ่ประกอบจากชิ้นส่วนเล็กๆ ชุดหนึ่ง เรียนรู้สิ่งเหล่านี้แล้วคุณจะอ่าน regex ส่วนใหญ่ที่พบในโลกจริงได้

Character classes อธิบายชุดอักขระที่อนุญาต [aeiou] match สระตัวเดียว [0-9] match ตัวเลขหนึ่งตัว และ [a-zA-Z] match ตัวอักษรหนึ่งตัว เครื่องหมาย caret ภายใน brackets ปฏิเสธ set ดังนั้น [^0-9] หมายถึง "อักขระใดก็ได้ที่ไม่ใช่ตัวเลข" ตัวย่อช่วยประหยัดการพิมพ์: \d คือตัวเลข \w คืออักขระคำ (ตัวอักษร ตัวเลข underscore) \s คือ whitespace และจุด . match เกือบทุกอักขระเดียว

Quantifiers บอกว่าชิ้นส่วนก่อนหน้าจะซ้ำได้กี่ครั้ง * หมายถึงศูนย์ครั้งขึ้นไป + หมายถึงหนึ่งครั้งขึ้นไป และ ? หมายถึงศูนย์หรือหนึ่งครั้ง (optional) สำหรับจำนวนที่แน่นอน {3} หมายถึงสามครั้งพอดีและ {2,4} หมายถึงสองถึงสี่ครั้ง ดังนั้น \d{4} match ปีสี่หลักและ colou?r match ทั้งสองการสะกด

Anchors ยึด pattern กับตำแหน่งแทนที่จะเป็นอักขระ ^ match จุดเริ่มต้นของข้อความ $ match จุดสิ้นสุด และ \b ทำเครื่องหมาย word boundary Pattern ^Error match เฉพาะบรรทัดที่เริ่มด้วย "Error" ซึ่งนั่นแหละที่คุณต้องการเมื่อสแกน log

Groups ห่อส่วนหนึ่งของ pattern ในวงเล็บ ทั้งเพื่อใช้ quantifier กับหลายอักขระพร้อมกันและเพื่อ capture ข้อความที่ match เพื่อนำไปใช้ต่อ ใน (\d{4})-(\d{2})-(\d{2}) แต่ละ group capture component วันที่ที่คุณดึงออกมาภายหลังได้ Alternation ด้วย pipe ทำหน้าที่เหมือน "หรือ": cat|dog|fish match คำใดคำหนึ่งในสาม

Pattern ที่คุณจะใช้งานจริง

งานซ้ำๆ ไม่กี่อย่างครอบคลุมงานจริงส่วนใหญ่ สำหรับดักอีเมลแบบคร่าวๆ [\w.+-]+@[\w-]+\.[\w.-]+ เป็นจุดเริ่มต้นที่ใช้งานได้จริง การตรวจสอบอีเมลเต็มตาม formal spec นั้นซับซ้อนมากเป็นที่ทราบกันดี และ pattern แบบหลวมๆ มักเป็นทางเลือกที่ถูกต้องสำหรับการไฮไลต์ผู้สมัครแทนการปฏิเสธผู้ใช้

สำหรับตัวเลข \d+ จับชุดตัวเลข ในขณะที่ -?\d+(\.\d+)? match ลบและทศนิยมที่ optional สำหรับตัด whitespace หน้า-หลัง ให้ match ^\s+|\s+$ แล้วแทนที่ด้วยไม่มีอะไร สำหรับหาคำที่ซ้ำกัน pattern backreference \b(\w+)\s+\1\b match คำที่ตามด้วยตัวเอง โดย \1 อ้างอิงกลับไปยัง group แรกที่ capture

คำที่ถูกเลือกเรืองแสงสีทองและไฮไลต์ภายในกระแสอนุภาคข้อความไซยานบนพื้นหลังน้ำเงินเข้ม
การไฮไลต์สดๆ แสดงให้เห็นว่า pattern match ช่วงใดของข้อความคุณบ้าง

Flags เปลี่ยนพฤติกรรมการ match

Flags คือสวิตช์ที่ปรับเปลี่ยน pattern ทั้งหมด Flag global (g) ค้นหาทุก match แทนที่จะหยุดที่ match แรก ซึ่งเป็นสิ่งที่คุณต้องการเมื่อไฮไลต์ทุกครั้งที่เกิดขึ้น Flag case-insensitive (i) ทำให้ error match ทั้ง "Error" และ "ERROR" Flag multiline (m) เปลี่ยน ^ และ $ ให้ match ที่จุดเริ่มต้นและจุดสิ้นสุดของทุกบรรทัด ไม่ใช่แค่ข้อความทั้งหมด ซึ่งจำเป็นสำหรับงาน log แบบบรรทัดต่อบรรทัด Flag ที่มีประโยชน์อื่นๆ ได้แก่ s (dotall ให้จุด match การขึ้นบรรทัดใหม่ด้วย) และ u สำหรับการจัดการ Unicode เต็มรูปแบบ

Regex flavor แตกต่างกันเล็กน้อยตามภาษา

Regex คือกลุ่มของ dialect ไม่ใช่มาตรฐานเดียวที่ตายตัว JavaScript, Python, PCRE (PHP), Java, .NET, Go และ Rust เห็นพ้องกันในไวยากรณ์พื้นฐานข้างต้น แต่แตกต่างกันที่ขอบ: การรองรับ lookbehind ไวยากรณ์ named-group ((?<name>...) เทียบกับ (?P<name>...)) Unicode property escapes และ flag ที่มีอยู่ล้วนแตกต่างกัน Pattern ที่ทำงานในหนึ่ง engine อาจต้องปรับเล็กน้อยในอีก engine ดังนั้นจึงควรทดสอบกับ flavor ที่คุณ deploy จริงๆ เมื่อ pattern ของคุณเสร็จสมบูรณ์แล้ว เครื่องมือสำหรับนักพัฒนาและเครื่องมือข้อความอื่นๆ ของเราช่วยด้านการทำความสะอาด encoding และการแปลงข้อมูลที่คุณเพิ่ง match ได้

คำถามที่พบบ่อย

ข้อความของฉันถูกส่งไปยังเซิร์ฟเวอร์หรือไม่?

ไม่ Regex Tester ทำงานทั้งหมดในเบราว์เซอร์ของคุณ Pattern และข้อความตัวอย่างอยู่บนอุปกรณ์ของคุณและไม่ถูกอัปโหลด ดังนั้นจึงปลอดภัยสำหรับการวางข้อมูลสำคัญ

เครื่องมือนี้ใช้ regex flavor ใด?

มันใช้ JavaScript regex engine ที่ฝังอยู่ในเบราว์เซอร์ของคุณ ไวยากรณ์หลัก match กับที่คุณรู้จากภาษาส่วนใหญ่ แม้ว่า feature ขั้นสูงบางอย่างจะแตกต่างเล็กน้อยจาก PCRE, Python หรือ .NET

ความแตกต่างระหว่าง greedy กับ lazy matching คืออะไร?

โดยค่าเริ่มต้น quantifiers แบบ greedy จะจับข้อความมากที่สุดเท่าที่จะได้ การเพิ่มเครื่องหมายคำถามทำให้เป็น lazy ซึ่งจับน้อยที่สุดเท่าที่จะได้ ตัวอย่างเช่น pattern จุดดาวแบบ greedy ในขณะที่จุดดาวตามด้วยเครื่องหมายคำถามแบบ lazy

วิธี match อักขระพิเศษตามตัวอักษรทำอย่างไร?

ใส่ backslash นำหน้า สำหรับการ match จุดจริงๆ ให้เขียน backslash แล้วตามด้วยจุด เช่นเดียวกับ meta characters อื่นๆ เช่น วงเล็บ วงเล็บเหลี่ยม เครื่องหมาย plus และเครื่องหมายคำถาม

ทำไม pattern ของฉันไม่ match อะไรเลย?

สาเหตุที่พบบ่อยคือ global flag หายไป anchors ยึด match ไว้ที่ตำแหน่งผิด อักขระพิเศษที่ไม่ได้ escape หรือ greedy quantifiers ที่วิ่งเลยขอบเขตที่คุณคาดไว้ ทดสอบทีละส่วนเพื่อหาตัวการ

ฉันสามารถ capture ส่วนต่างๆ ของ match ได้ไหม?

ได้ ห่อส่วนหนึ่งของ pattern ในวงเล็บเพื่อสร้าง capture group แต่ละ group จะถูกรายงานแยกกัน ช่วยให้คุณดึง field เช่น ปี เดือน และวันจากวันที่ได้