Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
RegEx
Наследует: RefCounted < Object
Класс для поиска в тексте шаблонов с использованием регулярных выражений.
Описание
Регулярное выражение (или regex) — это компактный язык, который можно использовать для распознавания строк, следующих определенному шаблону, например, URL-адресов, адресов электронной почты, целых предложений и т. д. Например, регулярное выражение ab[0-9] найдет любую строку, которая представляет собой ab, за которой следует любое число от 0 до 9. Для более подробного изучения вы легко найдете различные руководства и подробные объяснения в Интернете.
Для начала необходимо скомпилировать объект RegEx с шаблоном поиска с помощью метода compile(). В качестве альтернативы, для создания и компиляции объекта RegEx за один вызов метода можно использовать статический метод create_from_string().
var regex = RegEx.new()
regex.compile("\\w-(\\d+)")
# Сокращенная запись для создания и компиляции регулярного выражения (используется в примерах ниже):
var regex2 = RegEx.create_from_string("\\w-(\\d+)")
В GDScript шаблон поиска необходимо сначала экранировать, прежде чем экранировать его для выражения. Например, compile("\\d+") будет прочитано регулярным выражением как \d+. Аналогично, compile("\"(?:\\\\.|[^\"])*\"") будет прочитано как "(?:\\.|[^"])*". В GDScript также можно использовать строковые литералы (r-строки). Например, compile(r'"(?:\\.|[^"])*"') будет прочитано так же.
Используя search(), вы можете найти шаблон в заданном тексте. Если шаблон найден, возвращается RegExMatch, и вы можете получить подробную информацию о результатах, используя такие методы, как RegExMatch.get_string() и RegExMatch.get_start().
var regex = RegEx.create_from_string("\\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.create_from_string("d(?<digit>[0-9]+)|x(?<digit>[0-9a-f]+)")
var result = regex.search("the number is 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.create_from_string("\\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. Полный справочник шаблонов можно посмотреть здесь `.
[b]Совет:[/b] Вы можете использовать [url=https://regexr.com/]Regexr <https://www.pcre.org/current/doc/html/pcre2pattern.html>`__ для тестирования регулярных выражений онлайн.
Методы
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.