ชนิดของเอ็นจินนิพจน์ทั่วไปประเภทใดที่ใช้ทุบตี


12

ฉันใช้RegEx Buddyเพื่อสร้างต้นแบบและดีบักนิพจน์ปกติของฉัน RegEx Buddy อนุญาตให้ฉันเลือกระหว่างชนิดของเอ็นจินนิพจน์ทั่วไปที่แตกต่างกันจำนวนหนึ่ง (. NET, Java, Perl, GNU BRE, GNU ERE, POSIX, BRE, POSIX ERE เป็นต้น)

เอ็นจินนิพจน์ทั่วไปใดที่มีการใช้ bash (ตัวอย่างเช่นในifและcaseคำสั่ง) ฉันใช้ Centos 5.5 32 บิตและทุบตี 3.2.25 (1):

[kevin@mon01 scratch]$ bash --version
GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

ฉันเดาว่ามันจะเป็น GNU BRE หรือ GNU ERE

คำตอบ:


11

ทุบตี (และ POSIX หอยทั่วไป) ไม่ได้ใช้การแสดงออกปกติในcaseงบค่อนข้างglob รูปแบบ

มีการสนับสนุนที่ จำกัด สำหรับนิพจน์ทั่วไปโดยใช้=~โอเปอเรเตอร์ ดูรายละเอียดได้ที่: http://mywiki.wooledge.org/BashGuide/Patterns ,
ที่บอกว่าbashใช้ขยายนิพจน์ปกติ (ERE)


ขอบคุณ ลิงค์ที่สองกล่าวถึง ERE ที่ฉันคาดเดาว่าเป็น GNU ERE
Kev

3

Bash ไม่ได้ใช้การแสดงออกปกติใด ๆ ข้างต้นในifและcaseงบ

แต่มันใช้รูปแบบเปลือกทรงกลมซึ่งมีประสิทธิภาพน้อยกว่าการแสดงออกปกติใด ๆ เวอร์ชันใหม่ของ bash ค่อนข้างอนุญาตให้ใช้รูปแบบ glob แบบขยายซึ่งมีความหมายเท่ากับนิพจน์ทั่วไปโดยไม่มีจุดยึด (บรรทัด) แต่รวมถึงคำที่ถูกทำให้เป็นโมฆะ แต่ด้วยไวยากรณ์ที่แตกต่างจากประเภทนิพจน์ทั่วไปที่กล่าวถึงข้างต้น

อย่างไรก็ตามโปรดทราบว่าการขยายเชลล์ globs ต้องเปิดใช้งานก่อนใช้กับ shopt -s extglob ทั้งในเชลล์สคริปต์หรือแบบโต้ตอบ

ในสถานที่พิเศษเดียวคือภายใน[[ ]]คำสั่งเงื่อนไข=~ความสัมพันธ์แบบไบนารีอนุญาตให้ตรวจสอบสตริงที่ด้านซ้ายกับ ERE นิพจน์ทั่วไปที่ขยายทางด้านขวา


0

ตามคู่มือ Bash ที่เชื่อมโยงแล้ว Bash (ตั้งแต่รุ่น 3.0 ขึ้นไป) ใช้: "ภาษาขยายปกติ (ERE) "

ข้อมูลเพิ่มเติมเกี่ยวกับภาษาที่สามารถพบได้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.