ฉันตอบคำถามนี้ใน SuperUserซึ่งเป็นสิ่งที่เกี่ยวข้องกับประเภทของนิพจน์ทั่วไปที่ใช้ในขณะที่ทำการพิมพ์ออกมา
คำตอบที่ฉันให้คือ:
tail -f log | grep "some_string.*some_string"
จากนั้นในสามความคิดเห็นต่อคำตอบของฉัน@Bobเขียนสิ่งนี้:
.*
เป็นโลภและอาจจับภาพมากกว่าที่คุณต้องการ.*?
มักจะดีกว่า
ถ้าอย่างนั้น
the
?
เป็นตัวดัดแปลง*
ทำให้มันขี้เกียจแทนที่จะเป็นค่าเริ่มต้นโลภ สมมติว่า PCRE
ฉันไปหาPCRE
แต่ไม่สามารถเข้าใจความหมายของคำตอบนี้ได้?
และในที่สุดนี้
ฉันควรชี้ให้เห็นว่านี่คือ regex (grep ทำ POSIX regex โดยปริยาย) ไม่ใช่ shell glob
ฉันรู้ว่า Regex คืออะไรและใช้งานพื้นฐานมากเพียงใดในคำสั่ง grep ดังนั้นฉันไม่สามารถรับความคิดเห็นทั้งสามข้อเหล่านี้ได้และฉันมีคำถามเหล่านี้อยู่ในใจ:
- อะไรคือความแตกต่างในการใช้งานของ
.*?
vs..*
? - ไหนดีกว่าและภายใต้สถานการณ์ใด กรุณาให้ตัวอย่าง
นอกจากนี้ยังจะเป็นประโยชน์ในการทำความเข้าใจความคิดเห็นถ้าใครทำได้
UPDATE: เพื่อเป็นคำตอบสำหรับคำถามRegex ต่างจาก Shell Globs อย่างไร @Kusalanandaระบุลิงก์นี้ในความคิดเห็นของเขา
หมายเหตุ: หากจำเป็นโปรดอ่านคำตอบของฉันสำหรับคำถามนี้ก่อนตอบเพื่ออ้างอิงถึงบริบท
.*
กับ.*?
ปัญหา คำถาม "ความแตกต่างระหว่างนิพจน์ทั่วไปและเปลือกโกลเบลนั้นได้รับการแก้ไขแล้วในไซต์นี้