Освоение регулярных выражений: раскройте силу флага «m»

Регулярные выражения (regex) – это мощные инструменты для сопоставления с образцом и манипулирования данными. Одной из часто упускаемых из виду особенностей регулярных выражений являются флаги, которые можно использовать для изменения их поведения. В этой статье мы сосредоточимся на флаге «m» и рассмотрим различные методы его использования, чтобы улучшить ваши навыки работы с регулярными выражениями. Итак, пристегнитесь и приготовьтесь вывести свою игру с регулярными выражениями на новый уровень!

Метод 1: сопоставление в начале строк
Флаг «m», сокращение от «multiline», изменяет поведение привязки «^», чтобы он соответствовал началу каждой строки, а не только началу строки. нить. Давайте рассмотрим пример, в котором мы хотим найти все строки текста, начинающиеся со слова «Привет»:

const text = `Hello, how are you?
Hello, nice to meet you.
Goodbye, Hello there!`;
const regex = /^Hello/gm;
const matches = text.match(regex);
console.log(matches); // Output: ["Hello", "Hello"]

Метод 2: сопоставление в конце строк
Аналогично, флаг «m» изменяет поведение привязки «$», чтобы он соответствовал концу каждой строки, а не только концу строки. Найдем все строки, оканчивающиеся словом «мир» в заданном тексте:

import re
text = """Hello, world!
Welcome to the world.
Goodbye, cruel world!
"""
regex = r"world$"
matches = re.findall(regex, text, flags=re.MULTILINE)
print(matches)  # Output: ['world', 'world!']

Метод 3: сопоставление нескольких строк
Флаг «m» также позволяет нам сопоставлять шаблоны, охватывающие несколько строк. Допустим, мы хотим найти все вхождения фразы «Lorem ipsum» в нескольких строках текста:

text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n\nSed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\n\nUt enim ad minim veniam, quis nostrud exercitation ullamco."
regex = /Lorem ipsum/m
matches = text.scan(regex)
puts matches.inspect
# Output: ["Lorem ipsum"]

Метод 4: замена текста в каждой строке
Флаг «m» может быть удобен, когда мы хотим выборочно заменить текст в каждой строке. Давайте заменим все вхождения слова «яблоко» на «апельсин» только в начале каждой строки данного текста:

String text = "I like apples.\nApples are delicious.\nAn apple a day keeps the doctor away.";
String regex = "(?m)^apple";
String replacedText = text.replaceAll(regex, "orange");
System.out.println(replacedText);
// Output:
// I like apples.
// orange are delicious.
// An orange a day keeps the doctor away.

В этой статье мы рассмотрели флаг «m» в регулярных выражениях и продемонстрировали различные методы использования его возможностей. Используя флаг «m», мы можем сопоставлять шаблоны в начале и конце строк по нескольким строкам и выполнять целевые замены. Включение этих методов в ваш набор инструментов для регулярных выражений, несомненно, расширит ваши возможности сопоставления с образцом.