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() |
create_from_string(pattern: String, show_error: bool = true) static |
|
get_group_count() const |
|
get_names() const |
|
get_pattern() const |
|
is_valid() const |
|
search(subject: String, offset: int = 0, end: int = -1) const |
|
search_all(subject: String, offset: int = 0, end: int = -1) const |
|
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().
Возвращает количество групп захвата в скомпилированном шаблоне.
PackedStringArray get_names() const 🔗
Возвращает массив имен именованных групп захвата в скомпилированном шаблоне. Они упорядочены по внешнему виду.
Возвращает исходный шаблон поиска, который был скомпилирован.
Возвращает, назначен ли этому объекту допустимый шаблон поиска.
RegExMatch search(subject: String, offset: int = 0, end: int = -1) 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.