Заглиблення в розширені регулярні вирази
Регулярні вирази (регулярні вирази) — це потужні інструменти для зіставлення шаблонів і маніпулювання текстом. Переходячи за рамки основ, цей посібник досліджує розширені концепції регулярних виразів для вирішення складних завдань обробки тексту.
Розширені оглядові твердження
Оглядові твердження дозволяють вам зіставляти шаблон, лише якщо йому передує або слідує інший шаблон, не включаючи навколишній текст у збіг.
- Попередній позитивний пошук
(?=...)
: Забезпечує збіг шаблону, лише якщо за ним слідує вказаний вираз. - Негативний пошук уперед
(?!...)
: Забезпечує збіг шаблону, лише якщо за ним не йде вказаний вираз. - Позитивний огляд назад
(?<=...)
: Забезпечує збіг шаблону, лише якщо йому передує вказаний вираз. - Negative Lookbehind
(?<!...)
: Забезпечує збіг шаблону, лише якщо йому не передує вказаний вираз.
приклад:
(?<=\$)\d+
Цей регулярний вираз відповідає числам, перед якими стоїть знак долара.
Атомні групи
Атомні групи запобігають зворотному відстеженню після спроби збігу всередині групи. Вони корисні для покращення продуктивності, уникаючи непотрібного повернення назад.
приклад:
(?>\d+)\b
Цей регулярний вираз відповідає послідовності цифр як атомарній групі, запобігаючи відстеженню назад.
Зворотні посилання
Зворотні посилання дозволяють повторно використовувати раніше захоплену групу в шаблоні регулярного виразу. Це корисно для зіставлення повторюваних підрядків.
приклад:
(\b\w+)\s+\1
Цей регулярний вираз відповідає слову, за яким слідує те саме слово.
Іменовані групи
Іменовані групи дозволяють призначати імена групам захоплення, що робить ваш регулярний вираз більш читабельним, а зіставлені дані легшими для посилання.
приклад:
(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
Цей регулярний вираз відповідає датам у форматі РРРР-ММ-ДД і називає групи року, місяця та дня.
Рекурсивні шаблони
Рекурсивні шаблони дозволяють регулярному виразу відповідати вкладеним структурам, таким як збалансовані дужки. Це розширена функція, яка підтримується деякими механізмами регулярних виразів.
приклад:
\((?>[^()]+|(?R))*\)
Цей регулярний вираз відповідає збалансованим дужкам.
Використання регулярного виразу в різних мовах програмування
Regex підтримується багатьма мовами програмування, часто з невеликими варіаціями в синтаксисі та можливостях. Ось приклади на Python і JavaScript:
Приклад Python
import re
# Match a word followed by the same word
pattern = r'(\b\w+)\s+\1'
text = 'hello hello world'
match = re.search(pattern, text)
if match:
print('Match found:', match.group())
else:
print('No match found')
Приклад JavaScript
// Match a word followed by the same word
const pattern = /(\b\w+)\s+\1/;
const text = 'hello hello world';
const match = text.match(pattern);
if (match) {
console.log('Match found:', match[0]);
} else {
console.log('No match found');
}
Висновок
Розширені концепції регулярних виразів, такі як оглядові твердження, атомарні групи, зворотні посилання, іменовані групи та рекурсивні шаблони, можуть значно розширити ваші можливості обробки тексту. Освоївши ці техніки, ви зможете вирішувати складні завдання зіставлення та маніпуляції з більшою ефективністю та точністю.