Який тип двигуна регулярного вираження використовує bash?


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

bash (і оболонки POSIX взагалі) не використовують регулярні вирази у caseоператорі, а глобальні шаблони .

Існує обмежена підтримка регулярних виразів за допомогою =~оператора; Докладні відомості див. на веб- сайті: http://mywiki.wooledge.org/BashGuide/Patterns ,
де йдеться про bashвикористання розширених регулярних виразів (ERE).


Спасибі. Друга ланка згадує ERE, яку я здогадуюсь - GNU ERE.
Кев

3

Bash не використовує жодного з перерахованих вище типів регулярних виразів у ifта caseоператорах.

Швидше, він використовує шаблони оболонок, які є менш потужними, ніж будь-який вид регулярної експресії. Відносно нові версії bash також дозволяють використовувати розширені шаблони глобуса, які виразно рівні регулярним виразам без (лінійних) якорів, але включаючи заперечні терміни, але з синтаксисом, відмінним від будь-якого з вищезазначених типів регулярних виразів.

Однак зауважте, що розширені кулі оболонки повинні бути включені до попереднього використання shopt -s extglob як із сценарієм оболонки, так і в інтерактивному режимі.

У єдиному винятковому місці, а саме в [[ ]]умовному команді, =~бінарне відношення дозволяє перевірити рядок з лівої сторони проти розширеного регулярного виразу ERE з правого боку.


0

Відповідно до пов'язаного керівництва Bash, Bash (починаючи з версії 3.0+) використовує: " діалект розширеної регулярної виразності (ERE) ".

Більше інформації про цей діалект можна знайти тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.