Що таке інтервальне регулярне вираження та теговане регулярне вираження?


0

Я нещодавно читав про sed, коли я стикався з цією темою. Мені потрібні приклади, щоб краще зрозуміти тему.

Відповіді:


5

Оператор регулярних виразів інтервалу в базових регулярних виразах (BRE), як це підтримується стандартом sed, посилається на \{x,y\}.

Були б еквівалентні perlоператори ERE (розширений) або PCRE ( сумісні) (з -r/-E, -R/ -Pз деякими sedреалізаціями) {x,y}.

Вони використовуються для визначення діапазону повторних підрахунків для регулярного вираження.

sed 's/<a\{3,12\}>/<b>/'

Буде чи замінити перше входження <слід від 3 до 12 aроків з подальшими >з <b>.

На вході, як <a> <aa> <aaaa> <aaaaaaaa>, він замінить <aaaa>на <b>.

Позначені регулярні вирази частіше називаються групами захоплення .

В BRE, це з \(...\)і з ERE / PCRE з (...). Вони використовуються для зйомки тексту, який порівнюється регулярним виразом, щоб використовувати його або як зворотний посилання, або як підстановка. Вони також можуть бути використані для групування (як і \(foo\)*для будь-якої кількості foos).

В:

sed 's/\(.\)\(.\)\(.*\)\2\1/\1\2<\3>\2\1/'

У нас є 3 позначені вирази, відомі як групи захоплення , персонаж ( .повинен відповідати одному символу), відповідний першому, \(.\)буде позначений тегом 1і позначається як \1пізніше в регулярному вираженні (так що, якщо перший \(.\)захоплений a x, \1буде відповідати xлише ), а також викликається в заміну.

На вході, подібному whatever -+foobar+-, regexp знайде: (1:-)(2:+)(3:foobar)(2:+)(1:-)і sкоманда замінить його на -+<foobar>+-.

Стандартні (POSIX) ERE не підтримують зворотних посилань (що \1в regexp вище), тому (...)існує лише для групування (як у (foo|bar)або (foo){1,3}), хоча деякі реалізації підтримують його як розширення. У наступному великому випуску специфікації POSIX буде вказано -Eпараметр для sedрегулярних виразів використовувати ERE. \1у regexp (зворотні посилання) все ще не підтримуватимуться, але \1в sзаміні розширитись до того, що було відповідне відповідним теговим виразом.

python, perl, PCRE або сумісні регулярні вирази також дозволяють давати довільні імена позначених виразів (замість того , щоб просто 1, 2... пронумерованих зліва направо). Детальну інформацію див. У їх посібнику.

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