Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Документация по модулю [ просмотреть ] [ изменить ] [ историю ] [ очистить ]

Модуль: Строка  ( редактировать | говорить | история | ссылки | смотреть | журналы )

Этот модуль предназначен для обеспечения доступа к основным строковым функциям.

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

Глобальные параметры [ править ]

ignore_errors
Если установлено значение «истина» или 1, любое условие ошибки приведет к возврату пустой строки, а не сообщения об ошибке.
error_category
В случае возникновения ошибки указывает имя категории для включения в сообщение об ошибке. Категория по умолчанию - Категория: Ошибки, сообщаемые модулем String  (1).
no_category
Если установлено значение «истина» или 1, в случае возникновения ошибки категория добавляться не будет.

Модульные тесты для этого модуля доступны по адресу Module: String / testcases .

len [ править ]

Эта функция возвращает длину целевой строки.

Применение:

{{#invoke:String|len|target_string}}

ИЛИ ЖЕ

{{#invoke:String|len|s= target_string }}

Параметры:

s
Строка, длина которой сообщается.

Примеры:

  • {{#invoke:String|len| abcdefghi }} → 11
  • {{#invoke:String|len|s= abcdefghi }} → 9

sub [ править ]

Эта функция возвращает подстроку целевой строки по указанным включающим индексам с одним индексом.

Применение:

{{#invoke:String|sub|target_string|start_index|end_index}}

ИЛИ ЖЕ

{{#invoke:String|sub|s= target_string |i= start_index |j= end_index }}

Параметры:

s
Строка, возвращающая подмножество
я
Первый индекс возвращаемой подстроки, по умолчанию 1.
j
Последний индекс возвращаемой строки по умолчанию - последний символ.

Первому символу строки присваивается индекс 1. Если i или j является отрицательным значением, это интерпретируется так же, как выбор символа путем отсчета от конца строки. Следовательно, значение -1 совпадает с выбором последнего символа строки.

Если запрошенные индексы выходят за пределы диапазона данной строки, выдается сообщение об ошибке. Чтобы избежать сообщений об ошибках, используйте вместо этого {{#invoke: ustring | sub}}.

Примеры:

  • "{{#invoke:String|sub| abcdefghi }}" → "abcdefghi"
  • "{{#invoke:String|sub|s= abcdefghi }}" → "abcdefghi"
  • "{{#invoke:String|sub| abcdefghi | 3 }}" → "bcdefghi"
  • "{{#invoke:String|sub|s= abcdefghi |i= 3 }}" → "cdefghi"
  • "{{#invoke:String|sub| abcdefghi | 3 | 4 }}" → «до н.э.»
  • "{{#invoke:String|sub|s= abcdefghi |i= 3 |j= 4 }}" → «cd»

субсидия [ править ]

Эта функция реализует функции {{ str sub old }} и сохраняется для поддержки этих старых шаблонов. Он возвращает подстроку целевой строки, начиная с указанного индекса и указанной длины.

Применение:

{{#invoke:String|sublength|s= target_string |i= start_index |len= length }}

Параметры:

s
Строка
я
Начальный индекс возвращаемой подстроки. Первому символу строки присваивается индекс 0.
len
Длина возвращаемой строки по умолчанию - последний символ.

Примеры:

  • {{#invoke:String|sublength|s= abcdefghi }} → abcdefghi
  • {{#invoke:String|sublength|s= abcdefghi |i= 3 }} → defghi
  • {{#invoke:String|sublength|s= abcdefghi |i= 3 |len= 4 }} → defg

совпадение [ редактировать ]

Эта функция возвращает подстроку из исходной строки, которая соответствует указанному шаблону.

Применение:

{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}

ИЛИ ЖЕ

{{#invoke:String|match|s= source_string |pattern= pattern_string |start= start_index |match= match_number |plain= plain_flag |nomatch= nomatch_output }}

Параметры:

s
Строка для поиска
шаблон
Шаблон или строка, которую нужно найти в строке
Начало
Индекс в исходной строке для начала поиска. Первый символ строки имеет индекс 1. По умолчанию 1.
матч
В некоторых случаях в одной строке может быть несколько совпадений. Это указывает, какое совпадение нужно вернуть, где первое совпадение - match = 1. Если указано отрицательное число, то совпадение возвращается, отсчитывая от последнего совпадения. Следовательно, match = -1 - это то же самое, что запрос последнего совпадения. По умолчанию 1.
простой
Логический флаг, указывающий, что этот шаблон следует понимать как простой текст, а не как шаблон Scribunto ustring ( регулярное выражение в стиле Lua, совместимое с юникодом ). По умолчанию значение ЛОЖЬ (до изменения: )plain=true
не совпадает
Если совпадений не найдено, выведите значение «nomatch», а не ошибку.
ignore_errors
Если совпадение не найдено и ignore_errors = true, вывести пустую строку, а не ошибку.

Если match_number или start_index выходят за пределы диапазона для запрашиваемой строки, то эта функция генерирует ошибку. Также выдается ошибка, если совпадение не найдено. Если добавить параметр ignore_errors = true, ошибка будет подавлена, и при любой ошибке будет возвращена пустая строка.

Для получения информации о построении шаблонов Lua , формы регулярного выражения , см .:

  • Шаблоны Scribunto
  • Строковые шаблоны Юникода в Scribunto

Примеры:

  • {{#invoke:String|match| abc123def456 |%d+}} → 123
  • {{#invoke:String|match|s= abc123def456 |pattern= %d+ }} → 123
  • {{#invoke:String|match| abc123def456 |%d+|6}} → 23
  • {{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 }} → 3
  • {{#invoke:String|match|s= abc123def456 |pattern= %d+ |start= 6 |match= 2 }} → 456
  • {{#invoke:String|match|s= abc123%d+ |pattern= %d+ }} → 123
  • {{#invoke:String|match|s= abc123%d+ |pattern= %d+ |plain= true }} →% d +
  • {{#invoke:String|match|s= abc |pattern= %d }}Ошибка строкового модуля: совпадение не найдено
  • {{#invoke:String|match|s= abc |pattern= %d |nomatch= No numeric characters in string }} → В строке нет цифровых символов
  • {{#invoke:String|match|s= abc |pattern= %d |ignore_errors= true }}
  • {{#invoke:String|match|s= 0012001200 |pattern= 0*(%d*) }} → 1200–1200

позиция [ править ]

Эта функция возвращает один символ из целевой строки в позиции pos.

Применение:

{{#invoke:String|pos|target_string|index_value}}

ИЛИ ЖЕ

{{#invoke:String|pos|target= target_string |pos= index_value }}

Параметры:

цель
Строка для поиска
позиция
Индекс возвращаемого символа

Первый символ имеет индексное значение 1.

Если кто-то запрашивает отрицательное значение, эта функция выберет символ путем обратного отсчета от конца строки. Другими словами, pos = -1 - это то же самое, что запрос последнего символа.

Запрошенное нулевое значение или значение, превышающее длину строки, возвращает ошибку.

Примеры:

  • {{#invoke:String|pos| abcdefghi | 4 }} → с
  • {{#invoke:String|pos|target= abcdefghi |pos= 4 }} → d

str_find [ править ]

Эта функция дублирует поведение {{ str_find }}, включая все его причуды. Это предусмотрено для поддержки существующих шаблонов, но НЕ РЕКОМЕНДУЕТСЯ для нового кода и шаблонов. Вместо этого в новом коде рекомендуется использовать функцию «найти».

Возвращает первый индекс в «источнике», совпадающий с «целевым». Индексирование начинается с 1, и функция возвращает -1, если «целевая» строка отсутствует в «источнике».

Важное примечание: если «целевая» строка пуста / отсутствует, эта функция возвращает значение «1», что обычно является неожиданным поведением и должно учитываться отдельно.

Применение:

{{#invoke:String|find|source_string|target_string}}

ИЛИ ЖЕ

{{#invoke:String|find|source= source_string |target= target_string }}

Параметры:

источник
Строка для поиска
цель
Строка для поиска в исходном коде

Примеры:

  • {{#invoke:String|str_find| abc123def }} → 1
  • {{#invoke:String|str_find|source= abc123def }} → 1
  • {{#invoke:String|str_find| abc123def |123}} → 5
  • {{#invoke:String|str_find|source= abc123def |target= 123 }} → 4
  • {{#invoke:String|str_find| abc123def |not}} → -1

найти [ редактировать ]

Эта функция позволяет искать целевую строку или шаблон в другой строке.

Применение:

{{#invoke:String|find|source_string|target_string|start_index|plain_flag}}

ИЛИ ЖЕ

{{#invoke:String|find|source= source_string |target= target_string |start= start_index |plain= plain_flag }}

Параметры:

источник
Строка для поиска
цель
Строка или шаблон для поиска в исходном коде
Начало
Индекс в исходной строке для начала поиска, по умолчанию 1
простой
Логический флаг, указывающий, что цель должна пониматься как обычный текст, а не как шаблон Scribunto ustring ( удобное для Юникода регулярное выражение в стиле Lua ); по умолчанию true

Эта функция возвращает первый индекс> = "start", где "target" можно найти в "source". Индексы отсчитываются от 1. Если «цель» не найдена, эта функция возвращает 0. Если «источник» или «цель» отсутствуют / пусты, эта функция также возвращает 0.

Эта функция должна быть безопасной для строк UTF-8.

Примеры:

  • {{#invoke:String|find|abc123def|12}} → 4
  • {{#invoke:String|find|source=abc123def|target=12}} → 4
  • {{#invoke:String|find|source=abc123def|target=pqr}} → 0
  • {{#invoke:String|find| abc123def |123}} → 5
  • {{#invoke:String|find|source= abc123def |target= 123 }} → 4
  • {{#invoke:String|find|source=abc123def|target=%d |start=3 |plain=false }} → 4

При использовании безымянных параметров предшествующие и конечные пробелы сохраняются и учитываются:

  • {{#invoke:String|find| abc123def |c|false}} → 5
  • {{#invoke:String|find|source= abc123def |target=c|plain=false}} → 3
  • {{#invoke:string|find|abc 123 def|%s|plain=false}} → 4

replace (gsub) [ править ]

Эта функция позволяет заменить целевую строку или шаблон в другой строке. Для программистов Lua: эта функция работает внутренне, вызывая string.gsub.

Применение:

{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}

ИЛИ ЖЕ

{{#invoke:String|replace|source= source_string |pattern= pattern_string |replace= replace_string |count= replacement_count |plain= plain_flag }}

Параметры:

источник
Строка для поиска
шаблон
Строка или шаблон для поиска в исходном коде
заменять
Текст замены
считать
Количество заменяемых экземпляров; по умолчанию все
простой
Логический флаг, указывающий, что этот шаблон следует понимать как простой текст, а не как шаблон Scribunto ustring ( удобное для Юникода регулярное выражение в стиле Lua ); по умолчанию true

Примеры:

  • "{{#invoke:String|replace| abc123def456 |123|N}}" → «abcNdef456»
  • "{{#invoke:String|replace|source= abc123def456 |pattern= 123 |replace= N }}" → «abcNdef456»
  • "{{#invoke:String|replace| abc123def456 |%d+|N|1|false}}" → «abcNdef456»
  • "{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= N |count=1 |plain= false }}" → «abcNdef456»
  • "{{#invoke:String|replace|source= abc123def456 |pattern= %d+ |replace= N |plain= false }}" → «abcNdefN»
  • {{#invoke:String|replace|source= 0012001200 |pattern= ^0* |plain= false }} → 1200–1200

rep [ править ]

Повторяет строку n раз. Простая функция для передачи string.rep шаблонам.

Применение:

{{#invoke:String|rep|source|count}}

Параметры:

источник
Строка для повторения
считать
Количество повторов.

Примеры:

  • "{{#invoke:String|rep|hello|3}}" → "привет, привет, привет"
  • "{{#invoke:String|rep| hello | 3 }}" → "привет, привет, привет"

escapePattern [ править ]

В шаблоне Lua изменяет символ класса на буквальный символ . Например: в шаблоне символ .ловит «любой символ»; escapePattern преобразует его в %., улавливая только буквальный символ ".".

Применение:

  • {{#invoke:String|escapePattern|pattern_string}}

Параметры:

pattern_string
Строка шаблона для экранирования

Примеры:

  • "{{#invoke:String|escapePattern|A.D.}}" → «A% .D%.»
  • "{{#invoke:String|escapePattern|10%}}" → "10 %%"

считать [ редактировать ]

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

Применение:

{{#invoke:String|count|source_str|pattern_string|plain_flag}}

ИЛИ ЖЕ

{{#invoke:String|count|source= source_string |pattern= pattern_string|plain= plain_flag }}

Параметры:

исходная_строка
Строка для подсчета вхождений в
шаблон
Строка или шаблон для подсчета вхождений в исходном коде
простой
Логический флаг, указывающий, что этот шаблон следует понимать как простой текст, а не как шаблон Scribunto ustring ( удобное для Юникода регулярное выражение в стиле Lua ); по умолчанию true

Примеры:

  • Счетчик «а»: "{{#invoke:String|count|aabbcc|a}}"→ «2»
  • Счетчик «либо 'a', либо 'c'»: "{{#invoke:String|count|aabbcc|[ac]|plain=false}}"→ «4»
  • Счетчик «не а»: "{{#invoke:String|count|aaabaaac|[^a]|plain=false}}"→ «2»
  • Счетчик «начинается с« а »»: "{{#invoke:String|count|aaabaaac|^a|plain=false}}"→ «1»

присоединиться [ редактировать ]

Объединяет все строки, переданные в качестве аргументов, в одну строку, рассматривая первый аргумент как разделитель

Применение:

{{#invoke:String|join|separator|string1|string2|...}}

Параметры:

разделитель
Строка, разделяющая каждую соединяемую строку
Обратите внимание, что начальные и конечные пробелы не удаляются из разделителя.
строка1 / строка2 / ...
Струны соединяются вместе

Примеры:

  • "{{#invoke:String|join|x|foo|bar|baz}}" → "fooxbarxbaz"
  • "{{#invoke:String|join||a|b|c|d|e|f|g}}" → «abcdefg»
  • "{{#invoke:String|join|,|a|b|c|d|e|f|g}}" → «а, б, в, г, д, е, ж»
  • "{{#invoke:String|join|, |a|b|c|d|e|f|g}}" → «а, б, в, г, д, е, ж»
  • "{{#invoke:String|join| – |a|b|c|d|e|f|g}}" → «а - б - в - г - д - е - ж»

В предыдущем примере используется объект HTML & ndash; но символ Юникода также работает.

заканчивается [ править ]

Применение:

{{#invoke:String|endswith|source_str|search_string}}

ИЛИ ЖЕ

{{#invoke:String|endswith|source= source_string |pattern= search_string}}

Возвращает «да», если исходная строка заканчивается строкой поиска. Используйте именованные параметры, чтобы обрезать строки перед использованием. Несмотря на название параметра, search_string не является шаблоном Lua, он интерпретируется буквально.

  • "{{#invoke:String|endswith|xxxyyy|y}}" → «да»
  • "{{#invoke:String|endswith|xxxyyy|z}}" → ""

См. Также [ править ]

- [[Этот модуль предназначен для обеспечения доступа к основным строковым функциям.Большинство функций, представленных здесь, можно вызывать с именованными параметрами,безымянные параметры или смесь. Если используются именованные параметры, Mediawiki будетавтоматически удаляет любые начальные или конечные пробелы из параметра.В зависимости от предполагаемого использования может быть выгодно либо консервировать, либоудалите такие пробелы.Глобальные параметры ignore_errors: если установлено значение true или 1, любое состояние ошибки приведет к возвращается пустая строка, а не сообщение об ошибке. error_category: при возникновении ошибки указывает имя категории для включить в сообщение об ошибке. Категория по умолчанию - [Категория: ошибки, о которых сообщает строка модуля]. no_category: если установлено значение true или 1, в случае ошибки категория не добавляется. генерируется.Модульные тесты для этого модуля доступны по адресу Module: String / tests.]]local  str  =  {}- [[lenЭта функция возвращает длину целевой строки.Применение:{{#invoke: String | len | target_string |}}ИЛИ ЖЕ{{#invoke: String | len | s = target_string}}Параметры s: строка, длина которой сообщаетсяПри вызове с использованием именованных параметров Mediawiki автоматически удаляет все ведущие илизавершающий пробел от целевой строки.]]функция  ул . len (  рамка  )local  new_args  =  str . _getParameters (  frame . args ,  { 's' }  )local  s  =  new_args [ 's' ]  или  ""вернуть  мв . ustring . len (  s  )конец- [[субЭта функция возвращает подстроку целевой строки по указанным индексам.Применение:{{#invoke: String | sub | target_string | start_index | end_index}}ИЛИ ЖЕ{{#invoke: String | sub | s = target_string | i = start_index | j = end_index}}Параметры s: строка, возвращающая подмножество i: первый индекс возвращаемой подстроки, по умолчанию 1. j: последний индекс возвращаемой строки, по умолчанию последний символ.Первому символу строки присваивается индекс 1. Если i или j- отрицательное значение, оно интерпретируется так же, как выбор символа с помощьюотсчет от конца строки. Следовательно, значение -1 совпадает свыбор последнего символа строки.Если запрошенные индексы выходят за пределы заданной строки, возникает ошибка.сообщил.]]функция  ул . суб (  рамка  )local  new_args  =  str . _getParameters (  frame . args ,  {  's' ,  'i' ,  'j'  }  )local  s  =  new_args [ 's' ]  или  ""local  i  =  tonumber (  new_args [ 'i' ]  )  или  1local  j  =  tonumber (  new_args [ 'j' ]  )  или  - 1локальный  len  =  mw . ustring . len (  s  )- Преобразование негативов для проверки диапазонаесли  я  <  0,  тоя  =  len  +  я  +  1конецесли  j  <  0,  тоj  =  len  +  j  +  1конецесли  i  >  len  или  j  >  len  или  i  <  1  или  j  <  1,  товозврат  ул . _error (  'Индекс подмножества строк вне допустимого диапазона'  )конецесли  j  <  i,  товозврат  ул . _error (  'Индексы подмножества строк вышли из строя'  )конецвернуть  мв . ustring . sub (  s ,  i ,  j  )конец- [[Эта функция реализует функции {{str sub old}} и поддерживается в порядке.для поддержки этих старых шаблонов.]]функция  ул . субдлина (  каркас  )локальный  я  =  ToNumber (  кадр . арг . я  )  или  0локальная  Len  =  ToNumber (  кадр . арг . LEN  )вернуть  мв . ustring . суб (  кадр . арг . с ,  я  +  1 ,  Len  и  (  я  +  Len  )  )конец- [[_матчЭта функция возвращает подстроку из исходной строки, которая соответствуетуказанный шаблон. Экспортируется для использования в других модуляхПрименение:strmatch = require ("Module: String") ._ matchsresult = strmatch (s, шаблон, начало, соответствие, простой, nomatch)Параметры s: строка для поиска шаблон: шаблон или строка для поиска в строке начало: индекс в исходной строке для начала поиска. Первое Символ строки имеет индекс 1. По умолчанию 1. совпадение: в некоторых случаях может быть возможно сделать несколько совпадений на одном нить. Это указывает, какое совпадение вернуть, где первое совпадение match = 1. Если указано отрицательное число, возвращается совпадение. отсчет с последнего матча. Следовательно, match = -1 совпадает с запросом последний матч. По умолчанию 1. plain: флаг, указывающий на то, что шаблон следует понимать как простой текст. По умолчанию false. nomatch: Если совпадений не найдено, вывести значение «nomatch», а не ошибку.Для получения информации о построении шаблонов Lua, формы [регулярного выражения], см .:* http://www.lua.org/manual/5.1/manual.html#5.4.1* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns]]- Эта подпрограмма экспортируется для использования в других модуляхфункция  ул . _match (  s ,  шаблон ,  начало ,  match_index ,  plain_flag ,  nomatch  )если  s  ==  ''  товозврат  ул . _error (  'Целевая строка пуста'  )конецесли  шаблон  ==  ''  тогдавозврат  ул . _error (  'Строка шаблона пуста'  )конецначать  =  ToNumber ( старт )  или  1если  math.abs ( начало )  <  1  или  math.abs ( начало )  >  mw . ustring . len (  s  )  тогдавозврат  ул . _error (  'Запрошенный запуск вне допустимого диапазона'  )конецесли  plain_flag,  тошаблон  =  ул . _escapePattern (  шаблон  )конецместный  результатесли  match_index  ==  1,  то- Найти первое совпадение - это простой случайрезультат  =  mw . ustring . совпадение (  s ,  шаблон ,  начало  )ещеесли  start  >  1,  тоs  =  mw . ustring . sub (  s ,  начало  )конецлокальный  итератор  =  mw . ustring . gmatch ( s ,  шаблон )если  match_index  ==  0,  томестный  tbl  =  {}для  w  в  итераторе  сделатьtable.insert ( tbl ,  w )конецрезультат  =  table.concat ( TBL )ещеесли  match_index  >  0,  тогда- поиск в прямом направлениидля  w  в  итераторе  сделатьmatch_index  =  match_index  -  1если  match_index  ==  0,  торезультат  =  wперерывконецконецеще- Обратный поискlocal  result_table  =  {}местный  счетчик  =  1для  w  в  итераторе  сделатьтаблица_результатов [ количество ]  =  шcount  =  count  +  1конецresult  =  result_table [  count  +  match_index  ]конецконецконецесли  результат  ==  ноль,  тоесли  nomatch  ==  nil,  тоreturn str._error( 'Match not found' )elsereturn nomatchendelsereturn resultendend--[[matchThis function returns a substring from the source string that matches aspecified pattern.Usage:{{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}OR{{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index |match=match_number|plain=plain_flag|nomatch=nomatch_output}}Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error.If invoked using named parameters, Mediawiki will automatically remove any leading ortrailing whitespace from each string. In some circumstances this is desirable, inother cases one may want to preserve the whitespace.If the match_number or start_index are out of range for the string being queried, thenthis function generates an error. An error is also generated if no match is found.If one adds the parameter ignore_errors=true, then the error will be suppressed andan empty string will be returned on any failure.For information on constructing Lua patterns, a form of [regular expression], see:* http://www.lua.org/manual/5.1/manual.html#5.4.1* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns* http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns]]-- This is the entry point for #invoke:String|matchfunction str.match( frame )local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} )local s = new_args['s'] or ''local start = tonumber( new_args['start'] ) or 1local plain_flag = str._getBoolean( new_args['plain'] or false )local pattern = new_args['pattern'] or ''local match_index = math.floor( tonumber(new_args['match']) or 1 )local nomatch = new_args['nomatch']return str._match( s, pattern, start, match_index, plain_flag, nomatch )end--[[posThis function returns a single character from the target string at position pos.Usage:{{#invoke:String|pos|target_string|index_value}}OR{{#invoke:String|pos|target=target_string|pos=index_value}}Parameters target: The string to search pos: The index for the character to returnIf invoked using named parameters, Mediawiki will automatically remove any leading ortrailing whitespace from the target string. In some circumstances this is desirable, inother cases one may want to preserve the whitespace.The first character has an index value of 1.If one requests a negative value, this function will select a character by counting backwardsfrom the end of the string. In other words pos = -1 is the same as asking for the last character.A requested value of zero, or a value greater than the length of the string returns an error.]]function str.pos( frame )local new_args = str._getParameters( frame.args, {'target', 'pos'} )local target_str = new_args['target'] or ''local pos = tonumber( new_args['pos'] ) or 0if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) thenreturn str._error( 'String index out of range' )endreturn mw.ustring.sub( target_str, pos, pos )end--[[str_findThis function duplicates the behavior of {{str_find}}, including all of its quirks.This is provided in order to support existing templates, but is NOT RECOMMENDED fornew code and templates. New code is recommended to use the "find" function instead.Returns the first index in "source" that is a match to "target". Indexing is 1-based,and the function returns -1 if the "target" string is not present in "source".Important Note: If the "target" string is empty / missing, this function returns avalue of "1", which is generally unexpected behavior, and must be accounted forseparatetly.]]function str.str_find( frame )local new_args = str._getParameters( frame.args, {'source', 'target'} )local source_str = new_args['source'] or ''local target_str = new_args['target'] or ''if target_str == '' thenreturn 1endlocal start = mw.ustring.find( source_str, target_str, 1, true )if start == nil thenstart = -1endreturn startend--[[findThis function allows one to search for a target string or pattern within anotherstring.Usage:{{#invoke:String|find|source_str|target_string|start_index|plain_flag}}OR{{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}}Parameters source: The string to search target: The string or pattern to find within source start: The index within the source string to start the search, defaults to 1 plain: Boolean flag indicating that target should be understood as plain text and not as a Lua style regular expression, defaults to trueIf invoked using named parameters, Mediawiki will automatically remove any leading ortrailing whitespace from the parameter. In some circumstances this is desirable, inother cases one may want to preserve the whitespace.This function returns the first index >= "start" where "target" can be foundwithin "source". Indices are 1-based. If "target" is not found, then thisfunction returns 0. If either "source" or "target" are missing / empty, thisfunction also returns 0.This function should be safe for UTF-8 strings.]]function str.find( frame )local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } )local source_str = new_args['source'] or ''local pattern = new_args['target'] or ''local start_pos = tonumber(new_args['start']) or 1local plain = new_args['plain'] or trueif source_str == '' or pattern == '' thenreturn 0endplain = str._getBoolean( plain )local start = mw.ustring.find( source_str, pattern, start_pos, plain )if start == nil thenstart = 0endreturn startend--[[replaceThis function allows one to replace a target string or pattern within anotherstring.Usage:{{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}}OR{{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string| count=replacement_count|plain=plain_flag}}Parameters source: The string to search pattern: The string or pattern to find within source replace: The replacement text count: The number of occurences to replace, defaults to all. plain: Boolean flag indicating that pattern should be understood as plain text and not as a Lua style regular expression, defaults to true]]function str.replace( frame )local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } )local source_str = new_args['source'] or ''local pattern = new_args['pattern'] or ''local replace = new_args['replace'] or ''local count = tonumber( new_args['count'] )local plain = new_args['plain'] or trueif source_str == '' or pattern == '' thenreturn source_strendplain = str._getBoolean( plain )if plain thenpattern = str._escapePattern( pattern )replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences.endlocal resultif count ~= nil thenresult = mw.ustring.gsub( source_str, pattern, replace, count )elseresult = mw.ustring.gsub( source_str, pattern, replace )endreturn resultend--[[ simple function to pipe string.rep to templates.]]function str.rep( frame )local repetitions = tonumber( frame.args[2] )if not repetitions thenreturn str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' )endreturn string.rep( frame.args[1] or '', repetitions )end--[[escapePatternThis function escapes special characters from a Lua string pattern. See [1]for details on how patterns work.[1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#PatternsUsage:{{#invoke:String|escapePattern|pattern_string}}Parameters pattern_string: The pattern string to escape.]]function str.escapePattern( frame )local pattern_str = frame.args[1]if not pattern_str thenreturn str._error( 'No pattern string specified' )endlocal result = str._escapePattern( pattern_str )return resultend--[[countThis function counts the number of occurrences of one string in another.]]function str.count(frame)local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'})local source = args.source or ''local pattern = args.pattern or ''local plain = str._getBoolean(args.plain or true)if plain thenpattern = str._escapePattern(pattern)endlocal _, count = mw.ustring.gsub(source, pattern, '')return countend--[[endswithThis function determines whether a string ends with another string.]]function str.endswith(frame)local args = str._getParameters(frame.args, {'source', 'pattern'})local source = args.source or ''local pattern = args.pattern or ''if pattern == '' then-- All strings end with the empty string.return "yes"endif mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern thenreturn "yes"elsereturn ""endend--[[joinJoin all non empty arguments together; the first argument is the separator.Usage:{{#invoke:String|join|sep|one|two|three}}]]function str.join(frame)local args = {}local sepfor _, v in ipairs( frame.args ) doif sep thenif v ~= '' thentable.insert(args, v)endelsesep = vendendreturn table.concat( args, sep or '' )end--[[Helper function that populates the argument list given that user may need to use a mix ofnamed and unnamed parameters. This is relevant because named parameters are notidentical to unnamed parameters due to string trimming, and when dealing with stringswe sometimes want to either preserve or remove that whitespace depending on the application.]]function str._getParameters( frame_args, arg_list )local new_args = {}local index = 1local valuefor _, arg in ipairs( arg_list ) dovalue = frame_args[arg]if value == nil thenvalue = frame_args[index]index = index + 1endnew_args[arg] = valueendreturn new_argsend--[[Helper function to handle error messages.]]function str._error( error_str )local frame = mw.getCurrentFrame()local error_category = frame.args.error_category or 'Errors reported by Module String'local ignore_errors = frame.args.ignore_errors or falselocal no_category = frame.args.no_category or falseif str._getBoolean(ignore_errors) thenreturn ''endlocal error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'if error_category ~= '' and not str._getBoolean( no_category ) thenerror_str = '[[Category:' .. error_category .. ']]' .. error_strendreturn error_strend--[[Helper Function to interpret boolean strings]]function str._getBoolean( boolean_str )local boolean_valueif type( boolean_str ) == 'string' thenboolean_str = boolean_str:lower()if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'or boolean_str == '' thenboolean_value = falseelseboolean_value = trueendelseif type( boolean_str ) == 'boolean' thenboolean_value = boolean_strelseerror( 'No boolean value found' )endreturn boolean_valueend--[[Helper function that escapes all pattern characters so that they will be treatedas plain text.]]function str._escapePattern( pattern_str )return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )endreturn str