กลับไปหน้าบทความ

อ่าน 3 นาที

RE2 (ซอฟต์แวร์)

RE2เป็นไลบรารีซอฟต์แวร์C++ ซึ่งใช้งานเอ็นจิ้นนิพจน์ปกติโดยใช้เครื่องสถานะจำกัดซึ่งแตกต่างจากไลบรารีนิพจน์ปกติ อื่นๆ ส่วนใหญ่ RE2 ต้องการ C++ เวอร์ชันขั้นต่ำC++17และใช้ไลบรารี...

RE2 (ซอฟต์แวร์)

RE2
ผู้เขียนต้นฉบับGoogle
ปล่อย11 มีนาคม 2553 [ 1 ] ( 11 มีนาคม 2010 )
เวอร์ชันเสถียร
2021-04-01 / 12 สิงหาคม 2025 [ 2 ] ( 12 สิงหาคม 2025 )
เขียนเป็นซี++
ระบบปฏิบัติการข้ามแพลตฟอร์ม
พิมพ์ไลบรารีนิพจน์ปกติ
ใบอนุญาตบีเอสดี
เว็บไซต์github.com/google/re2แก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
ที่เก็บข้อมูลgithub.com/google/re2

RE2เป็นไลบรารีซอฟต์แวร์C++ [ 3 ]ซึ่งใช้งานเอ็นจิ้นนิพจน์ปกติ[ 3 ]โดยใช้เครื่องสถานะจำกัดซึ่งแตกต่างจากไลบรารีนิพจน์ปกติ อื่นๆ ส่วนใหญ่ RE2 ต้องการ C++ เวอร์ชันขั้นต่ำC++17และใช้ไลบรารี Abseilของ Google

RE2 ถูกนำไปใช้โดยGoogleและ Google ใช้ RE2 สำหรับผลิตภัณฑ์ของ Google [ 4 ] RE2 ใช้อัลกอริ ทึมอัตโนมัติสถานะจำกัดแบบกำหนดได้ "แบบเรียลไทม์" โดย อิงจาก Plan 9 grepของKen Thompson [ 5 ]มันถูกออกแบบมาเพื่อหลีกเลี่ยง การโจมตี ReDoS (การโจมตีปฏิเสธการให้บริการด้วย regex)

การเปรียบเทียบกับ PCRE

RE2 ทำงานได้เทียบเท่ากับนิพจน์ปกติที่เข้ากันได้กับ Perl (PCRE) สำหรับตัวดำเนินการนิพจน์ปกติบางอย่าง เช่น|(ตัวดำเนินการสำหรับการสลับหรือการแยกตรรกะ ) มันเหนือกว่า PCRE ต่างจาก PCRE ซึ่งรองรับคุณสมบัติเช่นlookarounds, backreferences และการเรียกซ้ำ RE2 สามารถรับรู้ภาษาปกติ ได้เท่านั้น เนื่องจากการสร้างโดยใช้อัลกอริทึม Thompson DFA [ 5 ]นอกจากนี้ยังช้ากว่า PCRE เล็กน้อยสำหรับการดำเนินการจับคู่ในวงเล็บ

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

การรับเลี้ยงบุตรบุญธรรม

RE2 พร้อมใช้งานสำหรับผู้ใช้Google DocsและGoogle Sheets [ 6 ] Google Sheets รองรับ RE2 ยกเว้นการจับคู่คลาสอักขระ Unicode [ 7 ] RegexExtract ไม่ใช้การ จัดกลุ่ม

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างการใช้งานre2เพื่อป้องกัน การโจมตี ReDoS (การโจมตีปฏิเสธการให้บริการโดยใช้ regular expression) ที่อาจเกิดขึ้น

import < re2 / re2 . h > ;import std ;using std :: string ; using re2 :: RE2 ;int main ( int argc , char * argv []) { string text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!" string pattern = "(a+)+$" ; bool match = RE2 :: FullMatch ( text , pattern ); std :: println ( "ผลการจับคู่: {}" , match ); }

RE2 มาพร้อมกับ wrapper Pythonในตัวซึ่งมีให้ใช้งานบนPython Package Index (PyPI) ในgoogle-re2ชื่อ[ 8 ]

แพ็ก เกจในตัวregexpของGoใช้รูปแบบและการใช้งานแบบเดียวกับ RE2 แม้ว่าจะเขียนด้วยภาษา Go ก็ตาม[ 9 ] ซึ่งไม่น่าแปลกใจเลย เนื่องจาก Go มีพนักงานร่วมกันจากทีม Plan 9

อัลกอริทึม RE2 ได้รับการเขียนใหม่ในภาษา Rustเป็นแพ็กเกจregexไฟร์วอลล์เว็บแอปพลิเคชันของCloudFlareใช้แพ็กเกจนี้เนื่องจากอัลกอริทึม RE2 ต้านทานการโจมตีReDoSได้[ 10 ]

Russ Cox ยังเขียน RE1 ซึ่งเป็นนิพจน์ปกติรุ่นก่อนหน้าที่อิงตามตัวแปลไบต์โค้ด[ 11 ] OpenRestyใช้ RE1 เวอร์ชันแยกที่เรียกว่า "sregex" [ 12 ]

มี การเชื่อมต่อ Java อย่างเป็นทางการ ที่เรียกว่า RE2J ( com.google.re2j) [ 8 ]

ภาษาต่อไปนี้มีการผูกมัดที่ไม่เป็นทางการ: [ 8 ]

ดูเพิ่มเติม

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=RE2_(software)&oldid=1352838129 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ RE2 (ซอฟต์แวร์)

RE2เป็นไลบรารีซอฟต์แวร์C++ ซึ่งใช้งานเอ็นจิ้นนิพจน์ปกติโดยใช้เครื่องสถานะจำกัดซึ่งแตกต่างจากไลบรารีนิพจน์ปกติ อื่นๆ ส่วนใหญ่ RE2 ต้องการ C++ เวอร์ชันขั้นต่ำC++17และใช้ไลบรารี...

การเปรียบเทียบกับ PCRE

RE2 ทำงานได้เทียบเท่ากับ นิพจน์ปกติที่เข้ากันได้กับ Perl (PCRE) สำหรับตัวดำเนินการนิพจน์ปกติบางอย่าง เช่น | (ตัวดำเนินการสำหรับ การสลับ หรือ การแยกตรรกะ ) มันเหนือกว่า PCRE ต่างจาก PCRE ซึ่งรองรับคุณสมบัติเช่น lookarounds, backreferences และการเรียกซ้ำ RE2...

การรับเลี้ยงบุตรบุญธรรม

RE2 พร้อมใช้งานสำหรับผู้ใช้ Google Docs และ Google Sheets [ 6 ] Google Sheets รองรับ RE2 ยกเว้นการจับคู่คลาสอักขระ Unicode [ 7 ] RegexExtract ไม่ใช้การ จัดกลุ่ม

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างการใช้งาน re2 เพื่อป้องกัน การโจมตี ReDoS (การโจมตีปฏิเสธการให้บริการโดยใช้ regular expression) ที่อาจเกิดขึ้น