RegEx

Наследует: RefCounted < Object

Класс для поиска в тексте шаблонов с использованием регулярных выражений.

Описание

Регулярное выражение (или regex) — это компактный язык, который можно использовать для распознавания строк, следующих определённому шаблону, например, URL-адресов, адресов электронной почты, полных предложений и т. д. Например, регулярное выражение ab[0-9] найдёт любую строку, которая содержит ab и за которой следует любое число от 0 до 9. Для более подробного изучения вы можете легко найти различные руководства и подробные объяснения в Интернете.

Для начала объект RegEx необходимо скомпилировать с шаблоном поиска с помощью compile(), прежде чем его можно будет использовать.

var regex = RegEx.new()
regex.compile("\\w-(\\d+)")

Шаблон поиска должен быть экранирован для GDScript, прежде чем он будет экранирован для выражения. Например, compile("\\d+") будет прочитан RegEx как \d+. Аналогично, compile("\"(?:\\\\.|[^\"])*\"") будет прочитан как "(?:\\.|[^"])*". В GDScript также можно использовать необработанные строковые литералы (r-строки). Например, compile(r'"(?:\\.|[^"])*"') будет читаться одинаково.

Используя search(), вы можете найти шаблон в заданном тексте. Если шаблон найден, возвращается RegExMatch, и вы можете получить подробную информацию о результатах, используя такие методы, как RegExMatch.get_string() и RegExMatch.get_start().

var regex = RegEx.new()
regex.compile("\\w-(\\d+)")
var result = regex.search("abc n-0123")
if result:
    print(result.get_string()) # Выводит "n-0123"

Результаты захвата групп () можно получить, передав номер группы различным методам RegExMatch. Группа 0 используется по умолчанию и всегда будет ссылаться на весь шаблон. В приведенном выше примере вызов result.get_string(1) вернет 0123.

Эта версия RegEx также поддерживает именованные захваты групп, и эти имена можно использовать для получения результатов. Если две или более групп имеют одинаковое имя, это имя будет ссылаться только на первую из них, совпавшую с шаблоном.

var regex = RegEx.new()
regex.compile("d(?<digit>[0-9]+)|x(?<digit>[0-9a-f]+)")
var result = regex.search("число равно x2f")
if result:
    print(result.get_string("digit")) # Выводит "2f"

Если вам нужно обработать несколько результатов, search_all() сгенерирует список всех непересекающихся результатов. Для удобства этот метод можно объединить с циклом for.

# Выводит "01 03 0 3f 42"
for result in regex.search_all("d01, d03, d0c, x3f and x42"):
    print(result.get_string("digit"))

Пример: Разделение строки с помощью регулярного выражения:

var regex = RegEx.new()
regex.compile("\\S+") # Отрицательный класс символов пробела.
var results = []
for result in regex.search_all("One  Two \n\tThree"):
    results.push_back(result.get_string())
print(results) # Выводит ["One", "Two", "Three"]

Примечание: Реализация регулярных выражений Godot основана на библиотеке PCRE2. Полную версию шаблона можно найти здесь.

Совет: Вы можете использовать Regexr для проверки регулярных выражений в Интернете.

Методы

void

clear()

Error

compile(pattern: String, show_error: bool = true)

RegEx

create_from_string(pattern: String, show_error: bool = true) static

int

get_group_count() const

PackedStringArray

get_names() const

String

get_pattern() const

bool

is_valid() const

RegExMatch

search(subject: String, offset: int = 0, end: int = -1) const

Array[RegExMatch]

search_all(subject: String, offset: int = 0, end: int = -1) const

String

sub(subject: String, replacement: String, all: bool = false, offset: int = 0, end: int = -1) const


Описания метода

void clear() 🔗

Этот метод сбрасывает состояние объекта, как будто он был только что создан. А именно, он отменяет назначение регулярного выражения этому объекту.


Error compile(pattern: String, show_error: bool = true) 🔗

Компилирует и назначает шаблон поиска для использования. Возвращает @GlobalScope.OK, если компиляция прошла успешно. Если компиляция не удалась, возвращает @GlobalScope.FAILED, а когда show_error равен true, подробности выводятся на стандартный вывод.


RegEx create_from_string(pattern: String, show_error: bool = true) static 🔗

Создает и компилирует новый объект RegEx. См. также compile().


int get_group_count() const 🔗

Возвращает количество групп захвата в скомпилированном шаблоне.


PackedStringArray get_names() const 🔗

Возвращает массив имен именованных групп захвата в скомпилированном шаблоне. Они упорядочены по внешнему виду.


String get_pattern() const 🔗

Возвращает исходный шаблон поиска, который был скомпилирован.


bool is_valid() const 🔗

Возвращает, назначен ли этому объекту допустимый шаблон поиска.


Выполняет поиск скомпилированного шаблона в тексте. Возвращает контейнер RegExMatch первого совпадающего результата, если он найден, в противном случае null.

Область поиска можно указать с помощью offset и end. Это полезно при поиске другого совпадения в том же subject путем повторного вызова этого метода после предыдущего успешного выполнения. Обратите внимание, что установка этих параметров отличается от передачи сокращенной строки. Например, начальный якорь ^ не зависит от offset, а символ перед offset будет проверяться на границу слова \b.


Array[RegExMatch] search_all(subject: String, offset: int = 0, end: int = -1) const 🔗

Выполняет поиск скомпилированного шаблона в тексте. Возвращает массив контейнеров RegExMatch для каждого неперекрывающегося результата. Если результаты не найдены, вместо этого возвращается пустой массив.

Область для поиска можно указать с помощью offset и end. Это полезно при поиске другого совпадения в том же subject путем повторного вызова этого метода после предыдущего успешного выполнения. Обратите внимание, что установка этих параметров отличается от передачи сокращенной строки. Например, начальный якорь ^ не зависит от offset, а символ перед offset будет проверяться на границу слова \b.


String sub(subject: String, replacement: String, all: bool = false, offset: int = 0, end: int = -1) const 🔗

Выполняет поиск скомпилированного шаблона в тексте и заменяет его указанной строкой. Экранированные символы и обратные ссылки, такие как $1 и $name, раскрываются и разрешаются. По умолчанию заменяется только первый экземпляр, но его можно изменить для всех экземпляров (глобальная замена).

Область поиска можно указать с помощью offset и end. Это полезно при поиске другого совпадения в том же subject путем повторного вызова этого метода после предыдущего успешного выполнения. Обратите внимание, что установка этих параметров отличается от передачи сокращенной строки. Например, начальный якорь ^ не зависит от offset, а символ перед offset будет проверяться на границу слова \b.