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 та x42"):
print(result.get_string("digit"))
Приклад: Розділити рядок за допомогою RegEx:
var regex = RegEx.new()
regex.compile("\\S+") # Клас символів пробілу з запереченням.
var results = []
for result in regex.search_all("Один Два \n\tТри"):
results.push_back(result.get_string())
print(results) # Виводить ["Один", "Два", "Три"]
Примітка: Реалізація регулярних виразів 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.