การอ้างอิง - นิพจน์นี้หมายถึงอะไร
นี่คืออะไร?
นี่คือชุดของคำถาม & คำตอบทั่วไป นี่เป็น Community Wiki ด้วยดังนั้นทุกคนจึงได้รับเชิญให้เข้าร่วมในการดูแลรักษา
ทำไมถึงเป็นแบบนี้?
regexกำลังทุกข์ทรมานจากการให้คำถามประเภทรหัส zeและคำตอบที่ไม่ดีโดยไม่มีคำอธิบาย การอ้างอิงนี้มีขึ้นเพื่อให้ลิงก์ไปยังการถามตอบด้านคุณภาพ
ขอบเขตคืออะไร?
อ้างอิงนี้มีความหมายสำหรับภาษาต่อไปนี้: PHP , Perl , JavaScript , งูหลาม , ทับทิม , Java , .net
สิ่งนี้อาจกว้างเกินไป แต่ภาษาเหล่านี้ใช้ไวยากรณ์เดียวกัน สำหรับคุณลักษณะเฉพาะจะมีแท็กของภาษาอยู่ข้างหลังเช่น:
- นิพจน์ทั่วไป Balancing Groups คืออะไร .สุทธิ
คำตอบ
คำถามที่พบบ่อยเกี่ยวกับนิพจน์ทั่วไปของ Stack Overflow
ดูยังมีจำนวนมากของคำแนะนำทั่วไปและการเชื่อมโยงที่มีประโยชน์ที่regex หน้ารายละเอียดแท็ก
บทเรียนออนไลน์
Quantifiers
- ศูนย์หรือมากกว่า
*:: โลภ ,*?: ไม่เต็มใจ ,*+: เป็นเจ้าของ - หนึ่งหรือมากกว่า
+:: โลภ ,+?: ไม่เต็มใจ ,++: เป็นเจ้าของ ?: ไม่บังคับ (ศูนย์หรือหนึ่ง)- นาที / ช่วง max (รวมทุกอย่าง):
{n,m}: ระหว่าง n & M ,{n,}: n หรืออื่น ๆ อีกมากมาย ,{n}: n ว่า - ความแตกต่างระหว่างโลภ, ไม่เต็มใจ (หรือที่เรียกว่า "ขี้เกียจ", "ไม่เคารพ") และตัวระบุปริมาณความเป็นเจ้าของ
- โลภเทียบกับไม่เต็มใจเทียบกับปริมาณที่เป็นเจ้าของ
- การอภิปรายในเชิงลึกเกี่ยวกับความแตกต่างระหว่างความโลภและความไม่โลภ
- อะไรคือความแตกต่างระหว่าง
{n}และ{n}? - ใครช่วยอธิบาย Possessive Quantifiers ให้ฉันฟังได้ไหม php , perl , java , ทับทิม
- การเลียนแบบตัวบ่งชี้ที่เป็นเจ้าของ . net
- การอ้างอิง Non-Stack Overflow: จากOracle , regular-expressions.info
คลาสตัวละคร
- อะไรคือความแตกต่างระหว่างวงเล็บเหลี่ยมและวงเล็บ?
[...]: อักขระใดตัวหนึ่ง,[^...]: ทำให้ถูกลบ / อักขระใด ๆ แต่[^]จับคู่อักขระตัวใดตัวหนึ่งรวมทั้ง javascript ขึ้นบรรทัดใหม่[\w-[\d]]/[a-z-[qz]]: ตั้งค่าการลบ. net , xml-schema , xpath , JGSoft[\w&&[^\d]]: ตั้งจุดตัด java , Ruby 1.9+[[:alpha:]]: คลาสอักขระ POSIX- ทำไม
[^\\D2],[^[^0-9]2],[^2[^0-9]]ได้รับผลลัพธ์ที่แตกต่างกันใน Java? java - ชวเลข:
- หลัก:
\d: บาท ,\D: ไม่ใช่หลัก - ตัวอักษร Word (Letter, หลักขีด):
\w: ตัวอักษรคำ ,\W: อักขระที่ไม่ใช่คำ - ช่องว่าง:
\s: ช่องว่าง ,\S: ไม่ใช่ช่องว่าง
- หลัก:
- หมวดหมู่ Unicode (
\p{L}, \P{L}ฯลฯ )
ลำดับการหลบหนี
- ช่องว่างแนวนอน:
\h: พื้นที่หรือแท็บ ,\t: แท็บ - Newlines:
- ลำดับช่องว่างเชิงลบ
\H:: อักขระช่องว่างที่ไม่ใช่แนวนอน,\V: อักขระช่องว่างที่ไม่ใช่แนวตั้ง,\N: อักขระฟีดที่ไม่ใช่บรรทัด pcre php5 java-8 - อื่น ๆ :
\v: แท็บแนวตั้ง ,\e: ตัวหนี
จุดยึด
^: เริ่มต้นของเส้น / input ,\b: ขอบเขตของคำและ\B: เขตแดนไม่ใช่คำ ,$: จุดสิ้นสุดของบรรทัด / input\A: start of input,:\Zend of input php , perl , ruby\z: ปลายสุดของอินพุต (\Zใน Python) .net , php , pcre , java , ruby , icu , swift , objective-c\G: จุดเริ่มต้นของการจับคู่ php , perl , ruby
(โปรดดูที่ "ข้อมูลเฉพาะรสชาติ→ Java →ฟังก์ชันในMatcher")
กลุ่ม
(...)กลุ่มจับ ,(?:)กลุ่มที่ไม่ใช่การจับภาพ\1: backreference and capture-group reference,:$1capture group reference- รูปแบบย่อย
(?i:regex)หมายถึงอะไร? - 'P'
(?P<group_name>regexp)หมายถึงอะไร? (?>)กลุ่มอะตอมหรือกลุ่มอิสระ ,(?|): รีเซ็ตสาขา- ตั้งชื่อกลุ่มการจับภาพ:
- การอ้างอิงกลุ่มการจับชื่อทั่วไปที่
regular-expressions.info - Java :
(?<groupname>regex): ภาพรวมและกฎการตั้งชื่อ (การเชื่อมโยงไม่ Stack มากเกิน) - ภาษาอื่น ๆ : งูหลาม , .net , Perl , และPHP
(?P<groupname>regex)(?<groupname>regex)(?<groupname>regex)(?P<groupname>regex)(?<groupname>regex)
- การอ้างอิงกลุ่มการจับชื่อทั่วไปที่
Lookarounds
- Lookaheads:
(?=...): บวก ,(?!...)ลบ - Lookbehinds:
(?<=...): บวก ,(?<!...)ลบ (ไม่สนับสนุนจาวาสคริปต์ ) - ขีด จำกัด Lookbehind ใน:
- ทางเลือก Lookbehind:
ตัวปรับเปลี่ยน
- รสชาติมากที่สุด:
g: โลก ,i: กรณีตาย ,u: Unicode ,x: ช่องว่างขยาย c: ตำแหน่งปัจจุบัน perl
e: นิพจน์ php perl
o: ทับทิมหนึ่งครั้งm: หลาย PHP Perl หลาม จาวาสคริปต์ .net Java ,m(ไม่ใช่) หลาย ทับทิมs: บรรทัดเดียว (ไม่รองรับจาวาสคริปต์หรือทับทิม ), จาวาสคริปต์sวิธีแก้ปัญหาชั่วคราวS: ศึกษา php
U: php r- วิธีแปลง preg_replace e เป็น preg_replace_callback
- อินไลน์โมดิฟายเออร์คืออะไร?
- '? -mix' ในนิพจน์ Ruby Regular คืออะไร
อื่น ๆ :
|: การสลับ (OR) ผู้ประกอบการ ,.: ตัวอักษรใด ๆ ,[.]: ตัวอักษร dot ตัวอักษร- ต้องมีอักขระพิเศษอะไรบ้าง?
- คำกริยา Control ( PHPและPerl ):
(*PRUNE),(*SKIP),(*FAIL)และ(*F)- phpเท่านั้น:
(*BSR_ANYCRLF)
- phpเท่านั้น:
- recursion ( PHPและPerl )
(?R),(?0)และ(?1),(?-1),(?&groupname)
งานทั่วไป
- รับสตริงระหว่างวงเล็บปีกกาสองซี่:
{...} - จับคู่ (หรือแทนที่) รูปแบบยกเว้นในสถานการณ์ s1, s2, s3 ...
- ฉันจะค้นหารหัสวิดีโอ YouTube ทั้งหมดในสตริงโดยใช้นิพจน์ทั่วไปได้อย่างไร
- การตรวจสอบ:
- อินเทอร์เน็ต: ที่อยู่อีเมล , URL ที่ (โฮสต์ / พอร์ต: regexและไม่ใช่ regexทางเลือก) รหัสผ่าน
- ตัวเลข: จำนวน , ช่วงนาทีสูงสุด (เช่น 1-31) , หมายเลขโทรศัพท์ , วันที่
- การแยกวิเคราะห์ HTML ด้วย regex: ดู "ข้อมูลทั่วไป> เมื่อใดที่ไม่ควรใช้ Regex"
Regex-Fu ขั้นสูง
- สตริงและตัวเลข:
- อื่น ๆ :
- เราจะจับคู่ ^ nb ^ n กับ Java regex ได้อย่างไร
- จับคู่วงเล็บที่ซ้อนกัน
- การจับคู่ regex "แนวตั้ง" ใน "รูปภาพ" ASCII
- รายการคำถาม regex ที่ได้รับการโหวตสูงใน Code Golf
- จะทำให้ตัวบ่งชี้สองตัวทำซ้ำในจำนวนครั้งเดียวกันได้อย่างไร?
- นิพจน์ทั่วไปที่ไม่สามารถจับคู่ได้:
(?!a)a - จับคู่ / ลบ / แทนที่
thisยกเว้นในบริบท A, B และ C - จับคู่วงเล็บที่ซ้อนกันกับ regex โดยไม่ใช้การเรียกซ้ำหรือการปรับสมดุลกลุ่ม?
ข้อมูลเฉพาะของรสชาติ
(ยกเว้นผู้ที่ทำเครื่องหมายไว้*ส่วนนี้จะมีลิงก์ที่ไม่ใช่ Stack Overflow)
- Java
- เอกสารอย่างเป็นทางการ: แบบ Javadoc , ของออราเคิลปกติแสดงออกกวดวิชา
- ความแตกต่างระหว่างฟังก์ชันใน
java.util.regex.Matcher:matches()): การจับคู่ต้องยึดกับทั้งอินพุตเริ่มต้นและ - สิ้นสุดfind()): การจับคู่อาจอยู่ที่ใดก็ได้ในสตริงอินพุต (สตริงย่อย)lookingAt(): การจับคู่ต้องยึดกับอินพุตเริ่มต้นเท่านั้น- (สำหรับแองเคอร์โดยทั่วไปโปรดดูหัวข้อ "แองเคอร์")
- เพียง
java.lang.Stringฟังก์ชั่นที่ยอมรับการแสดงออกปกติ:matches(s),replaceAll(s,s),replaceFirst(s,s),split(s),split(s,i) - * (แสดงความคิดเห็นและ) การอภิปรายโดยละเอียดเกี่ยวกับข้อเสียและคุณสมบัติที่ขาดหายไปใน
java.util.regex
- .สุทธิ
- เอกสารอย่างเป็นทางการ:
- Boost regex engine: ไวยากรณ์ทั่วไป , ไวยากรณ์Perl (ใช้โดย TextPad, Sublime Text, UltraEdit, ... ???)
- ข้อมูลทั่วไปของ JavaScript 1.5 และวัตถุ RegExp
- .NET
MySQL
Oracle
Perl5 เวอร์ชัน 18.2
- PHP: ไวยากรณ์รูปแบบ ,
preg_match - งูหลาม: การดำเนินงานการแสดงออกปกติ ,
searchVSmatch, วิธีการ - Splunk: คำศัพท์และไวยากรณ์regexและคำสั่ง regex
- Tcl: ไวยากรณ์ regex , manpage ,
regexpคำสั่ง - Visual Studio ค้นหาและแทนที่
ข้อมูลทั่วไป
(ลิงก์ที่มีเครื่องหมายเป็นลิงก์*ที่ไม่ใช่ Stack Overflow)
- แหล่งข้อมูลเอกสารทั่วไปอื่น ๆ : Learning Regular Expressions , * Regular-expressions.info , * Wikipedia entry , * RexEgg , Open-Directory Project
- DFA เทียบกับ NFA
- การสร้างสตริงที่ตรงกับ regex
- หนังสือ: การเรียนรู้นิพจน์ทั่วไปของ Jeffrey Friedl
- เมื่อใดที่ไม่ควรใช้นิพจน์ทั่วไป:
- บางคนเมื่อเผชิญกับปัญหาก็คิดว่า "ฉันรู้ฉันจะใช้นิพจน์ทั่วไป" ตอนนี้พวกเขามีปัญหาสองอย่าง (โพสต์บล็อกเขียนโดยผู้ก่อตั้ง Stack Overflow ) *
- อย่าใช้ regex เพื่อแยกวิเคราะห์ HTML:
- อย่า .
ได้โปรดอย่า
- บางที ... ถ้าคุณตั้งใจจริง (คำตอบอื่น ๆ ในคำถามนี้ก็ดีเช่นกัน)
- อย่า .
ตัวอย่างนิพจน์ทั่วไปที่อาจทำให้เอนจิน regex ล้มเหลว
เครื่องมือ: ผู้ทดสอบและผู้อธิบาย
(ส่วนนี้มีลิงก์ที่ไม่ใช่ Stack Overflow)
ออนไลน์(* รวมเครื่องทดสอบทดแทน + รวมเครื่องทดสอบแยก) :
- Debuggex (มีที่เก็บ regexes ที่มีประโยชน์ด้วย) javascript , python , pcre
- * นิพจน์ทั่วไป 101 php , pcre , python , javascript
- Regex Pal , regular-expressions.info จาวาสคริปต์
- Rubular ทับทิม
RegExr
Regex ฮีโร่ dotnet
- * + regexstorm.net .net
- * RegexPlanet: Java Java , Go Go , Haskell Haskell , JavaScript JavaScript , .NET dotnet , Perl Perl PHP PCRE PHP , Python หลาม , ทับทิม ทับทิม , XRegExp xregexp
freeformatter.comxregexp- * + php PCRE และ POSIX, javascript
regex.larsolavtorvik.com - อ้างอิง javascript ruby .net
ออฟไลน์:
- Microsoft Windows: RegexBuddy (การวิเคราะห์), RegexMagic (การสร้าง), Expresso (การวิเคราะห์การสร้างฟรี)