การอ้างอิง - นิพจน์นี้หมายถึงอะไร
นี่คืออะไร?
นี่คือชุดของคำถาม & คำตอบทั่วไป นี่เป็น 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,:\Z
end 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,:$1
capture 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
: ตำแหน่งปัจจุบัน perle
: นิพจน์ php perlo
: ทับทิมหนึ่งครั้งm
: หลาย PHP Perl หลาม จาวาสคริปต์ .net Java ,m
(ไม่ใช่) หลาย ทับทิมs
: บรรทัดเดียว (ไม่รองรับจาวาสคริปต์หรือทับทิม ), จาวาสคริปต์s
วิธีแก้ปัญหาชั่วคราวS
: ศึกษา phpU
: 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
- PHP: ไวยากรณ์รูปแบบ ,
preg_match
- งูหลาม: การดำเนินงานการแสดงออกปกติ ,
search
VSmatch
, วิธีการ - 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 ทับทิม
- * + regexstorm.net .net
- * RegexPlanet: Java Java , Go Go , Haskell Haskell , JavaScript JavaScript , .NET dotnet , Perl Perl PHP PCRE PHP , Python หลาม , ทับทิม ทับทิม , XRegExp xregexp
freeformatter.com
xregexp- * + php PCRE และ POSIX, javascript
regex.larsolavtorvik.com
- อ้างอิง javascript ruby .net
ออฟไลน์:
- Microsoft Windows: RegexBuddy (การวิเคราะห์), RegexMagic (การสร้าง), Expresso (การวิเคราะห์การสร้างฟรี)