Difference between revisions of "Строковые функции"
m (1 revision imported) |
m (1 revision imported) |
||
(15 intermediate revisions by 2 users not shown) | |||
Line 9: | Line 9: | ||
* [[Main_Page|Начальная страница]] | * [[Main_Page|Начальная страница]] | ||
* [[Общее_описание_языка|Общее описание]]}} | * [[Общее_описание_языка|Общее описание]]}} | ||
+ | __TOC__ | ||
Строковые функции работают со строками, их модификацией и превращением в разные кодировки и пр. Важно понимать, что в системе есть два вида строковых объектов -- однобайтовый (ANSI) и многобайтовый (Unicode). Более подробно см. [[Строки]]. | Строковые функции работают со строками, их модификацией и превращением в разные кодировки и пр. Важно понимать, что в системе есть два вида строковых объектов -- однобайтовый (ANSI) и многобайтовый (Unicode). Более подробно см. [[Строки]]. | ||
Line 132: | Line 133: | ||
|visual=0 | |visual=0 | ||
|description=Заменяет все вхождения строки второго аргумента в строке первого аргумента на строку третьего аргумента. Третий аргумент может содержать в себе строку второго аргумента. | |description=Заменяет все вхождения строки второго аргумента в строке первого аргумента на строку третьего аргумента. Третий аргумент может содержать в себе строку второго аргумента. | ||
+ | }} | ||
+ | {{function entry | ||
+ | |name=[[ReplaceCharacters]] | ||
+ | |form='''ReplaceCharacters'''(''<Строка в которой происходит замена>'',''<Заменяемые символы>'',''<Заменяющие символы>''):''<Результат (STRING)>'' | ||
+ | |type=1 | ||
+ | |status=2 | ||
+ | |visual=0 | ||
+ | |description=Функция производит множественную замену определенных символов на другие и возвращает ее результат. | ||
}} | }} | ||
{{function entry | {{function entry | ||
Line 343: | Line 352: | ||
{{function entry | {{function entry | ||
|name=[[FormatDate]] | |name=[[FormatDate]] | ||
− | |form='''FormatDate'''(''<Дата>'', | + | |form='''FormatDate'''(''<Дата>''{{Optional|,<Шаблон форматирования (STRING)>,<Язык форматирования (STRING)>}}):''<Результат (STRING)>'' |
|type=1 | |type=1 | ||
|status=2 | |status=2 | ||
Line 463: | Line 472: | ||
{{function entry | {{function entry | ||
|name=[[ReformatXML]] | |name=[[ReformatXML]] | ||
− | |form='''ReformatXML'''(''<Строка>''{{Optional|,''<Режимы (INT)>''{{Default|{{Eq}}3}}}}):''<Результат (STRING)>'' | + | |form='''ReformatXML'''(''<Строка или текст (STRING,TEXT)>''{{Optional|,''<Режимы (INT)>''{{Default|{{Eq}}3}}}}):''<Результат (STRING)>'' |
|type=1 | |type=1 | ||
|status=1 | |status=1 | ||
|visual=0 | |visual=0 | ||
|description=Приводит текст в XML нотации к каноническому простому виду с тем, чтобы его можно было разобрать обычными текстовыми функциями. Позволяет настроить глубину упрощения текста | |description=Приводит текст в XML нотации к каноническому простому виду с тем, чтобы его можно было разобрать обычными текстовыми функциями. Позволяет настроить глубину упрощения текста | ||
+ | }} | ||
+ | {{function entry | ||
+ | |name=[[LoadJSONFromString]] | ||
+ | |form='''LoadJSONFromString'''({{ByRef|<Строка (STRING)>}}{{Optional|,''<Тип возвращаемого объекта (INT)>''{{Default|{{Eq}}0}}}}):''<Результат (TREE,LIST)>'' | ||
+ | |type=1 | ||
+ | |status=2 | ||
+ | |visual=0 | ||
+ | |description=Функция загружает часть текста или весь текст в формате JSON и возвращает его представление в виде объекта дерева или списка. | ||
+ | }} | ||
+ | {{function entry | ||
+ | |name=[[SaveJSONToString]] | ||
+ | |form='''SaveJSONToString'''(''<Объект дерева, ветки или списка (STRING)>''):''<Результат (STRING)>'' | ||
+ | |type=1 | ||
+ | |status=2 | ||
+ | |visual=0 | ||
+ | |description=Функция превращает объект дерева, ветки или списка в текст JSON. | ||
}} | }} | ||
{{function entry | {{function entry | ||
Line 479: | Line 504: | ||
{{function entry | {{function entry | ||
|name=[[DecodeString]] | |name=[[DecodeString]] | ||
− | |form='''DecodeString'''(''<Строка>''{{Optional|,''<Формат декодирования (STRING)>''{{Default|{{Eq}}"INTERNAL"}}}}{{Optional|,''<Результат в формате UTF-16 (INT)>''{{Default|{{Eq}}0}}}}{{Optional|,''<Параметры декодирования (STRING)>''}}):''<Результат (STRING)>'' | + | |form='''DecodeString'''(''<Строка (STRING)>''{{Optional|,''<Формат декодирования (STRING)>''{{Default|{{Eq}}"INTERNAL"}}}}{{Optional|,''<Результат в формате UTF-16 (INT)>''{{Default|{{Eq}}0}}}}{{Optional|,''<Параметры декодирования (STRING)>''}}):''<Результат (STRING)>'' |
|type=1 | |type=1 | ||
|status=1 | |status=1 | ||
Line 487: | Line 512: | ||
{{function footer}} | {{function footer}} | ||
− | + | == Функции строк-массивов значений == | |
− | == Функции | ||
{{function header}} | {{function header}} | ||
{{function entry | {{function entry | ||
Line 537: | Line 561: | ||
|visual=0 | |visual=0 | ||
|description=Возвращает строку-массив значений, состоящую только из префиксов исходной строки-массива значений. | |description=Возвращает строку-массив значений, состоящую только из префиксов исходной строки-массива значений. | ||
+ | }} | ||
+ | {{function entry | ||
+ | |name=[[CopyStringValuesTo]] | ||
+ | |form='''CopyStringValuesTo'''(''<Аргумент>'',''<Строка-разделитель>'',''<Разделитель префикса>'',''<Объект для заполнения (LIST,TAB)>'') | ||
+ | |type=1 | ||
+ | |status=2 | ||
+ | |visual=0 | ||
+ | |description=Функция производит копирование массива значений из строки-массива в список или таблицу. | ||
}} | }} | ||
{{function footer}} | {{function footer}} | ||
+ | |||
+ | == Функции для работы с регулярными выражениями (regular expressions, RegExp) == | ||
+ | Функции этой группы позволяют использовать регулярные выражения для поиска, замены или разделения строк. Функции всегда работают с UTF-16 строками (если строка имеет формат ANSI, она будет превращена в UTF-16 перед работой, если строка имеет формат UTF-8, ее необходимо превратить в UTF-16 с помощью функции [[UTF8ToUnicode]]). Следует также понимать, что разбор длинной строки с помощью функций [[TearStr]] или подобных будет всегда быстрее, чем применение регулярных выражений (так как регулярные выражения подразумевают перебор, а не прямой поиск). Также важно учесть, что переводы строки в строке поиска должны состоять из последовательности (<Code>Chr(13)+Chr(10)</Code>, т.е. ''_NEWLINE''), иначе специальные символы '''^''' и '''$''' не будут работать корректно. | ||
+ | |||
+ | Система имеет свою интерпретацию синтаксиса регулярных выражений, она близка к JavaScript с дополнениями, присущими другим языкам. Ниже дана таблица конструкций и последовательностей символов в шаблоне регулярных выражений, которые понимаются системой, а также краткое описание каждой записи: | ||
+ | |||
+ | {|class="wikitable sortable" style="border-collapse:collapse;font-size:80%;width=95%;" | ||
+ | ! width=10%|Тип | ||
+ | ! width=10%|Последовательность | ||
+ | ! Описание | ||
+ | |- | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\n''' | ||
+ | |Символ перевода строки, Chr(10). | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\r''' | ||
+ | |Символ перевода каретки, Chr(13). | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\t''' | ||
+ | |Символ табуляции, Chr(9). | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\v''' | ||
+ | |Символ Chr(11). | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\h''' | ||
+ | |Любой из знаков пробела (любой из символов юникода со следующими кодами: <code>32, 9, 160, 5760, 6158, 8192-8202, 8239, 8287, 12288</code>). | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\H''' | ||
+ | |Любой символ, кроме знаков пробела (любой из символов, кроме символов юникода со следующими кодами: <code>32, 9, 160, 5760, 6158, 8192-8202, 8239, 8287, 12288</code>). | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\f''' | ||
+ | |Символ разделения страниц, Chr(12). | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''[\b]''' | ||
+ | |Символ забоя, Chr(8) (используется только внутри набора символов). | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\0''' | ||
+ | |Символ Chr(0). | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\R''' | ||
+ | |Набор символов перевода строки, соответствует любой из следующих комбинаций: <code>Chr(10), Chr(11), Chr(12), Chr(13), Chr(133), Chr(13)+Chr(10)</code>. | ||
+ | |-align="left" | ||
+ | |Спец. символы | ||
+ | |'''\N''' | ||
+ | |Обратно ''\R''. соответствует любому символу, кроме последовательностей из следующих комбинаций: <code>Chr(10), Chr(11), Chr(12), Chr(13), Chr(133), Chr(13)+Chr(10)</code>. | ||
+ | |-align="left" | ||
+ | |Кодирование символов | ||
+ | |'''\cX''' | ||
+ | |''X'' может принимать значения от '''A''' до '''Z'''. Соответствует символу с кодом, равным позиции буквы латинского алфавита, заданной после ''\c''. То есть, <code>\cA</code> будет соответствовать символу с кодом ''1'', тогда как <code>\cZ</code>, символу с кодом ''26''. | ||
+ | |-align="left" | ||
+ | |Кодирование символов | ||
+ | |'''\x??''' | ||
+ | |Соответствует символу с кодом, заданным шестнадцатеричным числом <code>??</code>. К примеру, <code>\x20</code> (пробел). | ||
+ | |-align="left" | ||
+ | |Кодирование символов | ||
+ | |'''\u????''' | ||
+ | |Соответствует символу с кодом, заданным шестнадцатеричным числом <code>????</code>. К примеру, <code>\x042F</code> (буква '''Я'''). Нужно заметить, что коды символов здесь не могут превышать 65535. | ||
+ | |-align="left" | ||
+ | |Кодирование символов | ||
+ | |'''\u{N}''', '''\x{N}''' | ||
+ | |Соответствует символу с кодом, заданным шестнадцатеричным числом <code>??????</code>. К примеру, <code>\u{1F642}</code> (символ эмоции '''🙂'''). '''N''' может находиться в диапазоне '''0'''..'''10FFFF'''. | ||
+ | |-align="left" | ||
+ | |Кодирование символов | ||
+ | |'''\?''' | ||
+ | |Символ экранирования '''\''' может использоваться для вставки символов, которые иначе трактовались бы как особые последовательности или спец. символы. К примеру <code>\\</code> (задает сам символ ''\'') или <code>\[</code> (задает сам символ ''[''). '''?''' может быть любым символом из набора: " ".."@", "[", "\", "]", "^", "_", "`", "{" и далее до конца таблицы юникода. | ||
+ | |-align="left" | ||
+ | |Кодирование символов | ||
+ | |'''\Q ... \E''' | ||
+ | |Экранирование группы символов "..." начинается с помощью последовательности ''\Q'' и заканчивается последовательностью ''\E'', все символы внутри не будут трактоваться как особые последовательности или спец. символы. К примеру <code>\Q+*\E</code> (задает два символа ''+*''). | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''[...]''' | ||
+ | |Конструкция задает набор символов, символ сравниваемого текста будет соответствовать, если он будет равен любому символу из списка, представленного данным набором. Внутри конструкции можно использовать не только символы, но и последовательности символов (<code>A-Z</code>), конструкции экранирования ''\Q ... \E'' и ''\?'', конструкции кодирования символов (''\x??'' и пр.), спец. символы (''\n'' и пр.), спец. наборы (''\d'' или ''\D'') и наборы юникода (''\p{Decimal_Digit_Number}'' и пр.). | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''[^...]''' | ||
+ | |Конструкция задает набор символов, символ сравниваемого текста будет соответствовать, если он не будет равен ни одному символу из списка, представленного данным набором. Внутри конструкции можно использовать не только символы, но и последовательности символов (<code>A-Z</code>), конструкции экранирования ''\Q ... \E'' и ''\?'', конструкции кодирования символов (''\x??'' и пр.), спец. символы (''\n'' и пр.), спец. наборы (''\d'' или ''\D'') и наборы юникода (''\p{Decimal_Digit_Number}'' и пр.). | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''.''' | ||
+ | |Специальный символ соответствует любому символу текста, кроме набора [\r\n\u2028\u2029]. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\C''' | ||
+ | |Конструкция соответствует коду символа, полученному из двух байтов текста -- data point (каждый UTF-16 символ может быть представлен как двумя, так и четырьмя знаками см. [[Строки]]). Не рекомендуется к использованию. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\d''' | ||
+ | |Конструкция задает набор числовых символов, соответствующий набору <code>[0-9]</code>. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\D''' | ||
+ | |Конструкция задает набор нечисловых символов, соответствующий набору <code>[^0-9]</code>. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\w''' | ||
+ | |Конструкция задает набор числовых и литерных символов, соответствующий набору <code>[A-Za-z0-9_]</code>. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\W''' | ||
+ | |Конструкция задает набор не числовых и не литерных символов, соответствующий набору <code>[^A-Za-z0-9_]</code>. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\s''' | ||
+ | |Конструкция задает набор символов пробела и невидимых символов, соответствующий набору <code>[\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]</code>. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\S''' | ||
+ | |Конструкция задает набор символов, не соответствующих символам пробела и невидимым символам. Соответствует набору <code>[^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]</code>. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\p?''' | ||
+ | |Конструкция задает набор символов, соответствующих одной из групп таблицы юникода. '''?''' может соответствовать символам: '''L''' -- буквенные символы (letter), '''M''' -- символы разметки (mark), '''N''' -- числовые символы (number), '''P''' -- символы пунктуации (punctuation), '''S''' -- рисунки и прочие символы (symbol), '''Z''' -- символы разделителей (separator), '''C''' -- остальные коды (other). Подробнее см. сл. [https://www.fileformat.info/info/unicode/category/index.htm таблицу]. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\P?''' | ||
+ | |Конструкция задает набор символов, не соответствующих одной из групп таблицы юникода, и является обратной по отношению к '''\p?'''. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\p{Group}''' | ||
+ | |Конструкция задает набор символов, соответствующих разнообразным группам таблицы юникода. '''Group''' чувствительна к регистру и может соответствовать комбинациям: <code>L, Letter, Ll, Lowercase_Letter, Lu, Uppercase_Letter, Lt, Titlecase_Letter, L&, Cased_Letter, Lm, Modifier_Letter, Lo, Other_Letter, M, Mark, Mn, Non_Spacing_Mark, Mc, Spacing_Combining_Mark, Me, Enclosing_Mark, Z, Separator, Zs, Space_Separator, Zl, Line_Separator, Zp, Paragraph_Separator, S, Symbol, Sm, Math_Symbol, Sc, Currency_Symbol, Sk, Modifier_Symbol, So, Other_Symbol, N, Number, Nd, Decimal_Digit_Number, Nl, Letter_Number, No, Other_Number, P, Punctuation, Pd, Dash_Punctuation, Ps, Open_Punctuation, Pe, Close_Punctuation, Pi, Initial_Punctuation, Pf, Final_Punctuation, Pc, Connector_Punctuation, Po, Other_Punctuation, C, Other, Cc, Control, Cf, Format, Co, Private_Use, Cs, Surrogate, Cn, Unassigned, InBasic_Latin, InLatin-1_Supplement, InLatin_Extended-A, InLatin_Extended-B, InIPA_Extensions, InSpacing_Modifier_Letters, InCombining_Diacritical_Marks, InGreek_and_Coptic, InCyrillic, InCyrillic_Supplementary, InArmenian, InHebrew, InArabic, InSyriac, InThaana, InDevanagari, InBengali, InGurmukhi, InGujarati, InOriya, InTamil, InTelugu, InKannada, InMalayalam, InSinhala, InThai, InLao, InTibetan, InMyanmar, InGeorgian, InHangul_Jamo, InEthiopic, InCherokee, InUnified_Canadian_Aboriginal_Syllabics, InOgham, InRunic, InTagalog, InHanunoo, InBuhid, InTagbanwa, InKhmer, InMongolian, InLimbu, InTai_Le, InKhmer_Symbols, InPhonetic_Extensions, InLatin_Extended_Additional, InGreek_Extended, InGeneral_Punctuation, InSuperscripts_and_Subscripts, InCurrency_Symbols, InCombining_Diacritical_Marks_for_Symbols, InLetterlike_Symbols, InNumber_Forms, InArrows, InMathematical_Operators, InMiscellaneous_Technical, InControl_Pictures, InOptical_Character_Recognition, InEnclosed_Alphanumerics, InBox_Drawing, InBlock_Elements, InGeometric_Shapes, InMiscellaneous_Symbols, InDingbats,InMiscellaneous_Mathematical_Symbols-A, InSupplemental_Arrows-A,InBraille_Patterns, InSupplemental_Arrows-B, InMiscellaneous_Mathematical_Symbols-B, InSupplemental_Mathematical_Operators, InMiscellaneous_Symbols_and_Arrows, InCJK_Radicals_Supplement, InKangxi_Radicals, InIdeographic_Description_Characters, InCJK_Symbols_and_Punctuation, InHiragana, InKatakana, InBopomofo, InHangul_Compatibility_Jamo, InKanbun, InBopomofo_Extended, InKatakana_Phonetic_Extensions, InEnclosed_CJK_Letters_and_Months, InCJK_Compatibility, InCJK_Unified_Ideographs_Extension_A, InYijing_Hexagram_Symbols, InCJK_Unified_Ideographs, InYi_Syllables, InYi_Radicals, InHangul_Syllables, InHigh_Surrogates, InHigh_Private_Use_Surrogates, InLow_Surrogates, InPrivate_Use_Area, InCJK_Compatibility_Ideographs, InAlphabetic_Presentation_Forms, InArabic_Presentation_Forms-A, InVariation_Selectors, InCombining_Half_Marks, InCJK_Compatibility_Forms, InSmall_Form_Variants, InArabic_Presentation_Forms-B, InHalfwidth_and_Fullwidth_Forms, InSpecials</code>. Для дополнительной информации, см. [https://www.fileformat.info/info/unicode/category/index.htm таблицу простых наборов], [https://www.regular-expressions.info/unicode.html#category описание категорий и диапазонов] или [http://www.unicode.org/Public/UNIDATA/UnicodeData.txt полную таблицу выделенных символов юникода]. | ||
+ | |-align="left" | ||
+ | |Наборы символов | ||
+ | |'''\P{Group}''' | ||
+ | |Конструкция задает набор символов, не соответствующих одной из групп таблицы юникода, заданных словом ''Group'', и является обратной по отношению к '''\p{Group}'''. | ||
+ | |-align="left" | ||
+ | |Конструкции проверки позиции | ||
+ | |'''^''' | ||
+ | |Конструкция соответствует положению в тексте, перед началом всего текста или любой строки (строки разделяются двумя символами \x0D\x0A). Поведение можно модифицировать (не включать начало каждой строки с помощью аргумента ''Флаги'' функций для работы с регулярными выражениями). | ||
+ | |-align="left" | ||
+ | |Конструкции проверки позиции | ||
+ | |'''\A''' | ||
+ | |Конструкция соответствует положению в тексте, перед началом всего текста (в отличие ''^'' не модифицируется). | ||
+ | |-align="left" | ||
+ | |Конструкции проверки позиции | ||
+ | |'''$''' | ||
+ | |Конструкция соответствует положению в тексте, после окончания всего текста или после последнего символа любой строки (строки разделяются двумя символами \x0D\x0A). Поведение можно модифицировать (не включать конец каждой строки с помощью аргумента ''Флаги'' функций для работы с регулярными выражениями). | ||
+ | |-align="left" | ||
+ | |Конструкции проверки позиции | ||
+ | |'''\Z''' | ||
+ | |Конструкция соответствует положению в тексте, после окончания всего текста, но перед последним символов перевод строки (\x0D\x0A), если таковой присутствует. | ||
+ | |-align="left" | ||
+ | |Конструкции проверки позиции | ||
+ | |'''\z''' | ||
+ | |Конструкция соответствует положению в тексте, после окончания всего текста. | ||
+ | |-align="left" | ||
+ | |Конструкции проверки позиции | ||
+ | |'''\b''' | ||
+ | |Конструкция "граница слов" соответствует положению в тексте, где предыдущий и последующий символы принадлежат разным группам из наборов <code>[A-Za-z0-9_]</code> и <code>[^A-Za-z0-9_]</code>. | ||
+ | |-align="left" | ||
+ | |Конструкции проверки позиции | ||
+ | |'''\B''' | ||
+ | |Конструкция "не граница слов" соответствует положению в тексте, где предыдущий и последующий символы принадлежат одинаковым группам из наборов <code>[A-Za-z0-9_]</code> и <code>[^A-Za-z0-9_]</code>. | ||
+ | |-align="left" | ||
+ | |Конструкция перечисления | ||
+ | |'''<nowiki>...|...|... ...</nowiki>''' | ||
+ | |Конструкция перечисления соответствует месту в тексте, которому соответствует любое из выражений внутри ее. Конструкция может работать как для всего регулярного выражения, так и для конкретной группы. Каждое выражение конструкции может быть произвольным регулярным выражением. Примеры: <code><nowiki>red|green</nowiki></code>, <code><nowiki>\b(red|green|blue)\b</nowiki></code>. | ||
+ | |-align="left" | ||
+ | |Группы проверки | ||
+ | |'''<nowiki>(?=...)</nowiki>''' | ||
+ | |Положительная группа проверки вперед соответствует положению в тексте после которого будет следовать кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: <code><nowiki>\S+\s+(?=XVI?)[IVX]+</nowiki></code> найдет "Людовик XV" в строке "Людовик XV — король Франции c 1 сентября 1715 года". | ||
+ | |-align="left" | ||
+ | |Группы проверки | ||
+ | |'''<nowiki>(?!...)</nowiki>''' | ||
+ | |Отрицательная группа проверки вперед соответствует положению в тексте после которого не будет следовать кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: <code><nowiki>\S+\s+(?!XVI)[VXI]+</nowiki></code> найдет "Людовик XV" в строке "Людовик XV — король Франции c 1 сентября 1715 года", однако, не найден ничего в строке "Людовик XVI — король Франции c 4 сентября 1791 года". | ||
+ | |-align="left" | ||
+ | |Группы проверки | ||
+ | |'''<nowiki>(?<=...)</nowiki>''' | ||
+ | |Положительная группа проверки назад соответствует положению в тексте перед которым должен находиться кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: <code><nowiki>\S+(?<=Людовик)\s+[IVX]+</nowiki></code> найдет "Людовик XV" в строке "Людовик XV — король Франции c 1 сентября 1715 года". | ||
+ | |-align="left" | ||
+ | |Группы проверки | ||
+ | |'''<nowiki>(?<=...)</nowiki>''' | ||
+ | |Отрицательная группа проверки назад соответствует положению в тексте перед которым не должен находиться кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: <code><nowiki>\S+(?<!Луи)\s+[IVX]+</nowiki></code> найдет "Людовик XV" в строке "Людовик XV — король Франции c 1 сентября 1715 года". | ||
+ | |-align="left" | ||
+ | |Группы выражений | ||
+ | |'''(...)''' | ||
+ | |Группа, содержащая произвольное регулярное выражение. Используется для удобства квантификации с символами типа "*", "+" и пр., для конструкций перечисления, а также возвращает последний найденный результат в соответствующих режимах функции [[MatchRE]]. Внутри групп разрешено использование других групп. Каждая группа имеет свой индекс, нумерация начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп). | ||
+ | |-align="left" | ||
+ | |Группы выражений | ||
+ | |'''(<Group>...)''' | ||
+ | |Именованная группа, отличается от '''(...)''' только тем, что имеет кроме номера еще и имя. При обращении к результатам групп (к примеру с помощью '''\g{?}''') можно указывать, как номер группы, так и наименование. При возврате результатов групп в функции [[MatchRE]] для именованных групп будет использовано имя, а для безымянных -- индекс. | ||
+ | |-align="left" | ||
+ | |Группы выражений | ||
+ | |'''(?:...)''' | ||
+ | |Группа без результата, отличается от '''(...)''' только тем, что не будет присутствовать в результатах функции [[MatchRE]] и также не будет иметь индекса группы, т.е., к ней нельзя будет обратиться к помощью конструкций '''\g{?}''' или подобных. | ||
+ | |-align="left" | ||
+ | |Группа комментария | ||
+ | |'''(?#...)''' | ||
+ | |Текст внутри данной группы не будет разбираться и участвовать в поиске результата. | ||
+ | |-align="left" | ||
+ | |Ссылки на группы | ||
+ | |'''\N''', '''\gN''', '''\g{N}''' | ||
+ | |Число '''N''' задает индекс обычной или именованной группы, текущий из результатов которой будет использован для поиска для текущей позиции сравнения. Фактически является ссылкой на результат группы. Нумерация групп начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп). | ||
+ | |-align="left" | ||
+ | |Ссылки на группы | ||
+ | |'''\k<Group>''', '''\g{Group}''' | ||
+ | |'''Group''' задает имя именованной группы, текущий из результатов которой будет использован для поиска для текущей позиции сравнения. Фактически является ссылкой на результат группы по ее имени. | ||
+ | |-align="left" | ||
+ | |Ссылки на группы | ||
+ | |'''\g{-N}''' | ||
+ | |Число '''N''' задает индекс обычной или именованной группы по отношению к последней заданной группе на данном этапе разбора шаблона, текущий из результатов которой будет использован для поиска для текущей позиции сравнения. Фактически является ссылкой на результат группы относительно к последней заданной. Нумерация групп начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп). | ||
+ | |-align="left" | ||
+ | |Ссылки на группы | ||
+ | |'''\g<N>''', '''\g<Group>''', '''\g<-N>''' | ||
+ | |Текст шаблона группы, заданной индексом, именем или индексом отношения будет использован, начиная с текущей позиции шаблона. Фактически является ссылкой на шаблон группы, для упрощения общего шаблона, если в нем есть несколько одинаковых по описанию групп. Нумерация групп начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп). Пример: <code><nowiki>(\S+) и (\g<1>)</nowiki></code> найдет "мам и пап" в строке "мам и пап", значение группы 1 будет равно "мам", а значение группы 2 будет равно "пап". Ссылка создает копию группы без результата, поэтому в примере, она добавлена в еще одну группу с результатом, чтобы показать разницу между ''\g{N}'' и ''\g<N>''. | ||
+ | |-align="left" | ||
+ | |Условия в шаблоне | ||
+ | |'''<nowiki>(?(N)...|...)</nowiki>''' | ||
+ | |Число '''N''' задает индекс обычной или именованной группы, если группа вернула какое-либо значение (группа могла не вернуть значение, если она не была выполнена из-за предыдущего условия, либо не задавала квантификацию с количеством ноль), для дальнейшего поиска будет использован первый из шаблонов внутри конструкции, иначе -- второй (после знака ''<nowiki>|</nowiki>''). Пример: <code><nowiki>(а)?(?(1)ма|па)</nowiki></code> найдет "ама" и два раза "па" в строке "мама и папа". | ||
+ | |-align="left" | ||
+ | |Условия в шаблоне | ||
+ | |'''<nowiki>(?(?=...)...|...)</nowiki>''', '''<nowiki>(?(?!...)...|...)</nowiki>''', '''<nowiki>(?(?<=...)...|...)</nowiki>''', '''<nowiki>(?(?<!...)...|...)</nowiki>''' | ||
+ | |Внутри условия задается одна из четырех групп проверки (см. выше), при поиске результата, если группа поиска нашла значение, для дальнейшего поиска будет использован первый из шаблонов внутри конструкции, иначе -- второй (после знака ''<nowiki>|</nowiki>''). Пример: <code><nowiki>(?(?<=а)м|п)</nowiki></code> найдет "м" с позицией 3 и "п" с позицией 8 в строке "мама и папа". | ||
+ | |-align="left" | ||
+ | |Квантификаторы | ||
+ | |'''?''' (жадная конструкция, greedy) | ||
+ | |Проверяет текст с текущей позиции поиска на совпадение с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкции (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадение не найдено, не передвигает позицию поиска, иначе передвигает ее. Иными словами, ищет 0 или 1 совпадений с предыдущим шаблоном. | ||
+ | |-align="left" | ||
+ | |Квантификаторы | ||
+ | |'''*''' (жадная конструкция, greedy) | ||
+ | |Проверяет текст с текущей позиции поиска на совпадение с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкцией (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадение не найдено, не передвигает позицию поиска, иначе пытается найти как можно больше последовательных совпадений, и передвигает позицию поиска за последним найденным. Иными словами, ищет 0 или более совпадений с предыдущим шаблоном. | ||
+ | |-align="left" | ||
+ | |Квантификаторы | ||
+ | |'''+''' (жадная конструкция, greedy) | ||
+ | |Проверяет текст с текущей позиции поиска на совпадение с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкцией (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадение не найдено, поиск для данной позиции будет завершен неудачей, иначе пытается найти как можно больше последовательных совпадений, и передвигает позицию поиска за последним найденным. Иными словами, ищет 1 или более совпадений с предыдущим шаблоном. | ||
+ | |-align="left" | ||
+ | |Квантификаторы | ||
+ | |'''{N}''', '''{N,}''', '''{N,M}''' (жадные конструкции, greedy) | ||
+ | |Находит максимально возможное количество последовательных совпадений текста в диапазоне от ''N'' до ''M'' с текущей позиции поиска с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкцией (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадения не найдены, поиск для данной позиции будет завершен неудачей, позицию поиска передвигается за последним найденным. Для конструкции ''{N}'' ищется точное ''N'' совпадений, для ''{N,}'' -- максимальное количество, но не меньше ''N'', для ''{N,M}'' -- максимальное количество из диапазона [''N''..''M'']. Иными словами, ищет от ''N'' до ''M'' совпадений с предыдущим шаблоном. | ||
+ | |-align="left" | ||
+ | |Квантификаторы | ||
+ | |'''??''', '''*?''', '''+?''', '''{N}?''', '''{N,}?''', '''{N,M}?''' (ленивые конструкции, lazy) | ||
+ | |В отличие от жадных квантификаторов (см. выше), данные находят минимальное возможное количество совпадений. | ||
+ | |-align="left" | ||
+ | |Квантификаторы | ||
+ | |'''?+''', '''*+''', '''++''', '''{N}+''', '''{N,}+''', '''{N,M}+''' (собственнические конструкции, possessive) | ||
+ | |В отличие от жадных квантификаторов (см. выше), данные находят максимально возможное количество совпадений, и не отдают результата, если для него требуется меньшее, чем максимальное найденное количество совпадений. Использование таких квантификаторов совместно с жадными или ленивыми в объемном тексте может привести с многократному замедлению поиска (до многих порядков), так как системе придется перебирать гораздо большее количество шагов, поэтому использовать их нужно с осторожностью (к примеру <code>.+(.++)ы+</code> для сравнительно небольшого текста будет являться причиной миллионов итераций). | ||
+ | |} | ||
+ | |||
+ | {{function header}} | ||
+ | {{function entry | ||
+ | |name=[[MatchRE]], '''PosRE''' | ||
+ | |form='''MatchRE'''(''<Выражение (STRING)>'',''<Строка, в которой происходит поиск (STRING)>''{{Optional|,''<Позиция начала поиска (INT)>''{{Default|{{Eq}}0}}}}{{OptionalByRef|,<Длина найденного (INT)>}}{{Optional|,<Режим поиска (INT)>{{Default|{{Eq}}0}},<Флаги поиска (INT)>{{Default|{{Eq}}0}}}}):''<Позиция, список или таблица (INT,LIST,TAB)>'' | ||
+ | |type=1 | ||
+ | |status=2 | ||
+ | |visual=0 | ||
+ | |description=Производит проверку шаблона регулярных выражений, заданного первым аргументом в тексте, заданным вторым аргументом. В зависимости от режима поиска может возвратить найденную позицию или ноль, список найденных значений (и значений групп поиска), либо таблицу позиций найденных значений (и значений групп поиска). | ||
+ | }} | ||
+ | {{function entry | ||
+ | |name=[[ReplaceRE]] | ||
+ | |form='''ReplaceRE'''(''<Строка, в которой происходит поиск (STRING)>'',''<Выражение (STRING)>'',''<Шаблон для замены (STRING)>''{{Optional|,''<Позиция начала поиска (INT)>''{{Default|{{Eq}}0}},<Максимальное количество замен (INT)>''{{Default|{{Eq}}0}},<Флаги поиска (INT)>{{Default|{{Eq}}0}}}}):''<Текст результата (STRING)>'' | ||
+ | |type=1 | ||
+ | |status=2 | ||
+ | |visual=0 | ||
+ | |description=Производит проверку шаблона регулярных выражений, заданного вторым аргументом в тексте, заданном первым аргументом. Возвращает текст, с заменой найденных в нем значений на текст или шаблон, заданный третьим аргументом. | ||
+ | }} | ||
+ | {{function entry | ||
+ | |name=[[TearStrRE]] | ||
+ | |form='''TearStrRE'''(''<Строка, в которой происходит поиск (STRING)>'',''<Выражение (STRING)>''{{Optional|,<Максимальное количество результатов для деления (INT)>''{{Default|{{Eq}}0}},<Флаги поиска (INT)>{{Default|{{Eq}}0}}}}):''<Список результатов деления (LIST)>'' | ||
+ | |type=1 | ||
+ | |status=2 | ||
+ | |visual=0 | ||
+ | |description=Производит проверку шаблона регулярных выражений, заданного вторым аргументом в тексте, заданном первым аргументом. Возвращает список отрывков текста, находившихся между найденными выражениями. Останавливает процесс деления текста при достижении максимального количества делений, последний отрезок текста (для которого, возможно, проверка не была закончена), также добавляется в результирующий список. | ||
+ | }} | ||
+ | {{function footer}} | ||
+ | |||
+ | {{Объекты}} |
Latest revision as of 07:58, 22 January 2025
Строковые функции | |||
---|---|---|---|
|
Contents
Строковые функции работают со строками, их модификацией и превращением в разные кодировки и пр. Важно понимать, что в системе есть два вида строковых объектов -- однобайтовый (ANSI) и многобайтовый (Unicode). Более подробно см. Строки.
Основные функции
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
Str | Реализована | Функция | Str(<Аргумент>,<Тип>=0):<Строковое представление (STRING)> | Превращение объекта в строковое представление с возможностью указания типа получаемой строки. | |
StringTypeStr | Реализована | Функция | StringTypeStr(<Аргумент>):<Тип строкового аргумента (STRING)> | Функция возвращает строку "ANSI", в случае, если строковое представление аргумента использует однобайтовую кодировку (ANSI), иначе будет возвращена строка "UNICODE" | |
Length | Реализована | Функция | Length(<Аргумент>):<Длина строки в символах (INT)> | Нахождение длины строки | |
IsBlankString | Реализована | Функция | IsBlankString(<Аргумент>):<1 или 0 (INT)> | Функция проверяет, является ли аргумент пустой строкой (в строке позволяются пробелы, знаки табуляции и знаки перевода строки) | |
TrimL | Реализована | Функция | TrimL(<Аргумент>):<Результат (STRING)> | Функция убирает пробелы, знаки табуляции и знаки переноса строки с начала строки строкового аргумента. | |
TrimR | Реализована | Функция | TrimR(<Аргумент>):<Результат (STRING)> | Функция убирает пробелы, знаки табуляции и знаки переноса строки с конца строки строкового аргумента. | |
Trim | Реализована | Функция | Trim(<Аргумент>):<Результат (STRING)> | Функция убирает пробелы, знаки табуляции и знаки переноса строки с начала и с конца строки строкового аргумента. | |
Left | Реализована | Функция | Left(<Аргумент>,<Количество символов (INT)>):<Результат (STRING)> | Функция получает левую часть строки аргумента с указанным размером | |
Right | Реализована | Функция | Right(<Аргумент>,<Количество символов (INT)>):<Результат (STRING)> | Функция получает правую часть строки аргумента с указанным размером | |
Mid | Реализована | Функция | Mid(<Аргумент>,<Индекс начального символа (INT)>,<Количество символов (INT)>):<Результат (STRING)> | Функция получает произвольную часть строки аргумента | |
Pos | Реализована | Функция | Pos(<Подстрока поиска>,<Строка в которой происходит поиск>,<Индекс начального символа (INT)>):<Индекс в строке поиска (INT)> | Находит вхождение подстроки в указанную строку поиска, начиная с указанной позиции, если подстрока не найдена, возвращает ноль | |
PosNoCase | Планируется | Функция | PosNoCase(<Подстрока поиска>,<Строка в которой происходит поиск>,<Индекс начального символа (INT)>):<Индекс в строке поиска (INT)> | Находит вхождение подстроки в указанную строку поиска, начиная с указанной позиции, если подстрока не найдена, возвращает ноль. Поиск ведется без учета регистра | |
RightPos | Реализована | Функция | RightPos(<Подстрока поиска>,<Строка в которой происходит поиск>,<Индекс начального символа (INT)>):<Индекс в строке поиска (INT)> | Находит вхождение подстроки в указанную строку поиска, начиная с указанной позиции, если подстрока не найдена, возвращает ноль. Поиск производится справа-налево. | |
RightPosNoCase | Планируется | Функция | RightPosNoCase(<Подстрока поиска>,<Строка в которой происходит поиск>,<Индекс начального символа (INT)>):<Индекс в строке поиска (INT)> | Находит вхождение подстроки в указанную строку поиска, начиная с указанной позиции, если подстрока не найдена, возвращает ноль. Поиск производится справа-налево. Поиск ведется без учета регистра | |
Replace | Реализована | Функция | Replace(<Строка в которой происходит замена>,<Подстрока поиска>,<Подстрока замены>):<Результат (STRING)> | Заменяет все вхождения строки второго аргумента в строке первого аргумента на строку третьего аргумента. Третий аргумент может содержать в себе строку второго аргумента. | |
ReplaceCharacters | Реализована | Функция | ReplaceCharacters(<Строка в которой происходит замена>,<Заменяемые символы>,<Заменяющие символы>):<Результат (STRING)> | Функция производит множественную замену определенных символов на другие и возвращает ее результат. | |
ReplaceNoCase | Планируется | Функция | ReplaceNoCase(<Строка в которой происходит замена>,<Подстрока поиска>,<Подстрока замены>):<Результат (STRING)> | Заменяет все вхождения строки второго аргумента в строке первого аргумента на строку третьего аргумента. Третий аргумент может содержать в себе строку второго аргумента. Поиск ведется без учета регистра | |
RepeatStr | Реализована | Функция | RepeatStr(<Аргумент>,<Количество повторений (INT)>):<Результат (STRING)> | Повторяет строковое представление аргумента указанное количество раз | |
Reverse | Реализована | Функция | Reverse(<Аргумент>):<Результат (STRING)> | Получает строку набранную с конца до начала строкого представления аргумента | |
StrCount | Реализована | Функция | StrCount(<Подстрока поиска>,<Строка в которой происходит поиск>):<Количество вхождений (INT)> | Находит количество вхождений подстроки поиска в строку, представленную вторым аргументом. После нахождения вхождения индекс поиска сдвигается на размер строки поиска. | |
LinesCount | Реализована | Функция | LinesCount(<Аргумент>):<Количество строк (INT)> | Находит количество вхождений знака перевода строки в строковое представление аргумента и увеличивает результат на единицу | |
GetLine | Реализована | Функция | GetLine(<Аргумент>,<Номер строки (INT)>):<Результат (STRING)> | В строковом представлении аргумента, разделенного знаками перевода строки, находит и возвращает подстроку с указанным индексом. | |
UpperCase | Реализована | Функция | UpperCase(<Аргумент>):<Результат (STRING)> | Возвращает строковое представление аргумента, переведенное в верхний регистр | |
LowerCase | Реализована | Функция | LowerCase(<Аргумент>):<Результат (STRING)> | Возвращает строковое представление аргумента, переведенное в нижний регистр | |
Capitalize | Реализована | Функция | Capitalize(<Аргумент>):<Результат (STRING)> | Функция возвращает строковое представление аргумента, переводя первый его символ в верхний регистр. | |
RemoveNonPrintableChars | Реализована | Функция | RemoveNonPrintableChars(<Аргумент>,<Оставить символы перевода строки (INT)>=0):<Результат (STRING)> | Удаляет из текстового представления аргумента непечатные символы (символы с кодом <32), оставляя символы перевода строки при необходимости | |
Chr | Реализована | Функция | Chr(<Код символа (INT)>,<Тип (INT)>=0):<Символ (STRING)> | Возвращает строку, состоящую из одного символа по указанному коду в ANSI или UTF-16 кодировке. | |
Asc | Реализована | Функция | Asc(<Аргумент>):<Код символа (INT)> | Возвращает код первого символа строкового представления аргумента. | |
ContainsOnlyCharacters | Реализована | Функция | ContainsOnlyCharacters(<Аргумент>,<Набор символов>):<0 или 1 (INT)> | Проверяет, содержит ли строковое представление первого аргумента только символы, указанные в строковом представлении второго аргумента. | |
CompareStrings | Реализована | Функция | CompareStrings(<Аргумент 1>,<Аргумент 2>,<Метод (INT)>=1,<Ошибка>=""):<0, 1 или -1 (INT)> | Сравнивает две строки, используя указанный метод, возвращает -1, если первая строка меньше второй, 0, если строки равны и 1 в ином случае. | |
IsUnicode | Реализована | Функция | IsUnicode(<Аргумент>):<0 или 1 (INT)> | Проверяет, является ли строковое представление аргумента строкой UTF-16 или ANSI (см. Строки) | |
Unicode | Реализована | Функция | Unicode(<Аргумент>):<Результат (STRING)> | Безусловно переводит строковое представление аргумента в строку UTF-16 | |
UnicodeToUTF8 | Реализована | Функция | UnicodeToUTF8(<Аргумент>):<Результат (STRING)> | Превращает строковое представление аргумента (не обязательно строку в формате UTF-16) в строку ANSI с закодированным текстом в формате UTF-8 | |
UTF8ToUnicode | Реализована | Функция | UTF8ToUnicode(<Аргумент>):<Результат (STRING)> | Превращает перекодирует результат из формата UTF-8 в формат UTF-16. | |
Ansi | Реализована | Функция | Ansi(<Аргумент>):<Результат (STRING)> | Безусловно переводит строковое представление аргумента в строку ANSI, используя системную кодовую страницу. | |
OemToAnsi | Реализована | Функция | OemToAnsi(<Аргумент>):<Результат (STRING)> | Производит перекодировку строкового представления аргумента из кодовой страницы OEM в ANSI, используя системную кодовую страницу. | |
AnsiToOem | Реализована | Функция | AnsiToOem(<Аргумент>):<Результат (STRING)> | Производит перекодировку строкового представления аргумента из кодовой страницы ANSI в OEM, используя системную кодовую страницу. | |
AnsiToUTF8 | Реализована | Функция | AnsiToUTF8(<Аргумент>):<Результат (STRING)> | Производит перекодировку строкового представления аргумента из кодовой страницы ANSI в UTF-8, используя системную кодовую страницу. | |
UTF8ToAnsi | Реализована | Функция | UTF8ToAnsi(<Аргумент>):<Результат (STRING)> | Производит перекодировку строкового представления аргумента из UTF-8 в кодовую страницу ANSI, используя системную кодовую страницу. | |
TranslateFrom | Реализована | Функция | TranslateFrom(<Аргумент>,<Кодовая страница (INT)>,<Удалять BOM (INT)>=1):<Результат (STRING)> | Производит перекодировку строкового представления аргумента из кодовой страницы, заданной вторым аргументом в UTF-16, при необходимости удаляет BOM | |
TranslateTo | Реализована | Функция | TranslateTo(<Аргумент>,<Кодовая страница (INT)>,<Добавить BOM (INT)>=0):<Результат (STRING)> | Производит перекодировку строкового представления аргумента из UTF-16 в кодовую страницу, заданную вторым аргументом, при необходимости добавляя BOM | |
Translate | Реализована | Функция | Translate(<Аргумент>,<Кодовая страница источник (INT)>,<Кодовая страница приемник (INT)>,<Удалять и добавлять BOM (INT)>=0):<Результат (STRING)> | Производит перекодировку строкового представления аргумента из кодовой страницы, заданной вторым аргументом в кодовую страницу, заданную третьим аргументом, при необходимости удаляя и добавляя BOM | |
FormatDate | Реализована | Функция | FormatDate(<Дата>,<Шаблон форматирования (STRING)>,<Язык форматирования (STRING)>):<Результат (STRING)> | Производит перекодировку даты и времени в строковой формат по указанному шаблону, используя указанный язык | |
FormatPeriod | Планируется | Функция | Производит перекодировку периода между двумя датами в строковой формат по указанному шаблону, используя указанный язык | ||
FormatNumber | Реализована | Функция | FormatNumber(<Число>,<Нули пустой строкой (INT)>=1,<Разделитель тысяч (STRING)>="'",<Точность после точки (INT)>=2):<Результат (STRING)> | Производит перекодировку и формирование числа в строковой формат, используя указанные установки | |
SpellNumber | Реализована | Функция | SpellNumber(<Число>,<Язык кодирования (STRING)>,<Род результата (STRING)>="М"):<Результат (STRING)> | Превращает число в его прописное представление, используя указанный язык и грамматический род результата | |
FormatCurrency | Реализована | Функция | FormatCurrency(<Число>,<Режим (INT)>=0,<Тип валюты (STRING)>="USD",<Язык форматирования (STRING)>):<Результат (STRING)> | Создает прописное представление денежной номинации по указанным правилам, для указанной валюты, используя указанный язык | |
TearStr | Реализована | Функция | TearStr(<Строка>,<Подстрока-разделитель>="@"):<Результат (STRING)> | Производит деление исходного строкового представления на две строки, разделенные вторым аргументом, возвращая в результате первую подстроку, и обновляя значение переменной первого аргумента второй строкой, если первый аргумент был переменной. | |
GetSubStr | Реализована | Функция | GetSubStr(<Строка>,<Индекс (INT)>,<Подстрока-разделитель>="@"):<Результат (STRING)> | Получает подстроку исходной строки, начиная с индекса символа, указанного во втором аргументе до следуюшего вхождения строки-разделителя в исходную строку. Индекс обновляется до позиции, непосредственно за найденной строкой-разделителем. | |
AppendStringToBufferedString | Реализована | Функция | AppendStringToBufferedString(<Строка>,<Добавляемая строка>,<Шаг увеличения буфера (INT)>) | Добавляет к строке в указанной в переменной, следующей первым аргументом, строку, заданную вторым аргументом. Используется для оптимизации скорости выполнения для длинных строк с большим количеством приращений. | |
FileToString | Реализована | Функция | FileToString(<Имя файла>,<Кодовая страница (INT)>=0):<Результат (STRING)> | Загружает указанный файл в строку, используя указанную кодовую страницу. Результирующая строка будет перекодирована в UTF-16, если кодовая страница равна нулю и присутвует BOM или больше нуля | |
StringToFile | Реализована | Функция | StringToFile(<Строка>,<Имя файла>,<Кодовая страница (INT)>=0,<Добавить BOM (INT)>=0) | Сохраняет строку в файл, при необходимости перекодируя ее в нужную кодировку и добавляя BOM. Вызывает исключение при ошибке. | |
AppendStringToFile | Реализована | Функция | AppendStringToFile(<Строка>,<Имя файла>) | Дополняет содержимое файла указанной строкой. Строка добавляется без перекодировки, если нужна определенная кодовая страница, строку необходимо предварительно подготовить. Функция вызывает исключение при ошибке. | |
EncodeXMLString | Реализована | Функция | EncodeXMLString(<Строка>):<Результат (STRING)> | Перекодирует знаки, запрещенные в теле файлов в XML формате, в разрешенную форму (к примеру "&" превращается в & )
| |
DecodeXMLString, DecodeHTMLString | Реализована | Функция | DecodeXMLString(<Строка>):<Результат (STRING)> | Перекодирует текст в HTML/XML нотации в обычный текст, т.е. последовательности типа & или ♥ в соответствующие знаки
| |
EncodeHTMLString | Планируется | Функция | EncodeXMLString(<Строка>):<Результат (STRING)> | Перекодирует знаки, запрещенные в теле файлов в HTML формате, в разрешенную форму (к примеру "&" превращается в & ). В отличии от XML версии, производится перекодировка большего количества знаков, которые разрешены в XML, однако, запрещены в HTML.
| |
CreateGUID | Реализована | Функция | CreateGUID():<Результат (STRING)> | Формирует новый GUID идентификатор системным медотом | |
ReformatXML | Частичная реализация | Функция | ReformatXML(<Строка или текст (STRING,TEXT)>,<Режимы (INT)>=3):<Результат (STRING)> | Приводит текст в XML нотации к каноническому простому виду с тем, чтобы его можно было разобрать обычными текстовыми функциями. Позволяет настроить глубину упрощения текста | |
LoadJSONFromString | Реализована | Функция | LoadJSONFromString(<Строка (STRING)>,<Тип возвращаемого объекта (INT)>=0):<Результат (TREE,LIST)> | Функция загружает часть текста или весь текст в формате JSON и возвращает его представление в виде объекта дерева или списка. | |
SaveJSONToString | Реализована | Функция | SaveJSONToString(<Объект дерева, ветки или списка (STRING)>):<Результат (STRING)> | Функция превращает объект дерева, ветки или списка в текст JSON. | |
EncodeString | Частичная реализация | Функция | EncodeString(<Строка или буфер (STRING,BUFFER)>,<Формат кодирования (STRING)>="INTERNAL",<Параметры кодирования (STRING)>):<Результат (STRING)> | Производит кодирование строки в указанный формат (к примеру, "Base64" или "UUE"). Могут кодироваться как ANSI, так и Unicode строки, информация также может получаться из буфера. | |
DecodeString | Частичная реализация | Функция | DecodeString(<Строка (STRING)>,<Формат декодирования (STRING)>="INTERNAL",<Результат в формате UTF-16 (INT)>=0,<Параметры декодирования (STRING)>):<Результат (STRING)> | Производит декодирование строки из указанного формата (к примеру, "Base64" или "UUE"). Могут декодироваться как ANSI, так и Unicode строки. |
Функции строк-массивов значений
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
AssertStringValues | Реализована | Функция | AssertStringValues(<Аргумент 1>,<Аргумент 2>,<Строка-разделитель>,<Тип операции (INT)>,<Разделитель префикса>="") | Производит проверку двух строк-массивов значений, имеющих префиксы, если необходимо, указанным методом. Если проверка неудачна, создает исключение. | |
JoinStringValues | Реализована | Функция | JoinStringValues(<Аргумент 1>,<Аргумент 2>,<Строка-разделитель>,<Тип операции (STRING)>="OR",<Разделитель префикса>=""):<Результат (STRING)> | Выполняет указанную логическую операцию над двумя строками-массивами значений, имеющих префиксы, если необходимо. Возвращает результирующую строку-массив значений. | |
GetStringValuesByPrefix | Реализована | Функция | GetStringValuesByPrefix(<Аргумент>,<Строка-разделитель (STRING)>,<Разделитель префикса (STRING)>,<Значение префикса>):<Результат (STRING)> | Возвращает строку-массив значений, состоящую только из значений строки-массива значений аргумента с указанным префиксом | |
GroupStringValues | Реализована | Функция | GroupStringValues(<Аргумент>,<Строка-разделитель>,<Разделитель префикса>=""):<Результат (STRING)> | Возвращает строку-массив значений, которая содержит только уникальные значения исходной строки-массива значений. | |
SortStringValues | Реализована | Функция | SortStringValues(<Аргумент>,<Строка-разделитель>,<Направление (INT)>=0,<Разделитель префикса>=""):<Результат (STRING)> | Возвращает строку-массив значений, полученную путем регистро-зависимой сортировки в указанном направлении значений исходной строки-массива значений. | |
GetPrefixesFromStringValues | Реализована | Функция | GetPrefixesFromStringValues(<Аргумент>,<Строка-разделитель>,<Разделитель префикса>):<Результат (STRING)> | Возвращает строку-массив значений, состоящую только из префиксов исходной строки-массива значений. | |
CopyStringValuesTo | Реализована | Функция | CopyStringValuesTo(<Аргумент>,<Строка-разделитель>,<Разделитель префикса>,<Объект для заполнения (LIST,TAB)>) | Функция производит копирование массива значений из строки-массива в список или таблицу. |
Функции для работы с регулярными выражениями (regular expressions, RegExp)
Функции этой группы позволяют использовать регулярные выражения для поиска, замены или разделения строк. Функции всегда работают с UTF-16 строками (если строка имеет формат ANSI, она будет превращена в UTF-16 перед работой, если строка имеет формат UTF-8, ее необходимо превратить в UTF-16 с помощью функции UTF8ToUnicode). Следует также понимать, что разбор длинной строки с помощью функций TearStr или подобных будет всегда быстрее, чем применение регулярных выражений (так как регулярные выражения подразумевают перебор, а не прямой поиск). Также важно учесть, что переводы строки в строке поиска должны состоять из последовательности (Chr(13)+Chr(10)
, т.е. _NEWLINE), иначе специальные символы ^ и $ не будут работать корректно.
Система имеет свою интерпретацию синтаксиса регулярных выражений, она близка к JavaScript с дополнениями, присущими другим языкам. Ниже дана таблица конструкций и последовательностей символов в шаблоне регулярных выражений, которые понимаются системой, а также краткое описание каждой записи:
Тип | Последовательность | Описание |
---|---|---|
Спец. символы | \n | Символ перевода строки, Chr(10). |
Спец. символы | \r | Символ перевода каретки, Chr(13). |
Спец. символы | \t | Символ табуляции, Chr(9). |
Спец. символы | \v | Символ Chr(11). |
Спец. символы | \h | Любой из знаков пробела (любой из символов юникода со следующими кодами: 32, 9, 160, 5760, 6158, 8192-8202, 8239, 8287, 12288 ).
|
Спец. символы | \H | Любой символ, кроме знаков пробела (любой из символов, кроме символов юникода со следующими кодами: 32, 9, 160, 5760, 6158, 8192-8202, 8239, 8287, 12288 ).
|
Спец. символы | \f | Символ разделения страниц, Chr(12). |
Спец. символы | [\b] | Символ забоя, Chr(8) (используется только внутри набора символов). |
Спец. символы | \0 | Символ Chr(0). |
Спец. символы | \R | Набор символов перевода строки, соответствует любой из следующих комбинаций: Chr(10), Chr(11), Chr(12), Chr(13), Chr(133), Chr(13)+Chr(10) .
|
Спец. символы | \N | Обратно \R. соответствует любому символу, кроме последовательностей из следующих комбинаций: Chr(10), Chr(11), Chr(12), Chr(13), Chr(133), Chr(13)+Chr(10) .
|
Кодирование символов | \cX | X может принимать значения от A до Z. Соответствует символу с кодом, равным позиции буквы латинского алфавита, заданной после \c. То есть, \cA будет соответствовать символу с кодом 1, тогда как \cZ , символу с кодом 26.
|
Кодирование символов | \x?? | Соответствует символу с кодом, заданным шестнадцатеричным числом ?? . К примеру, \x20 (пробел).
|
Кодирование символов | \u???? | Соответствует символу с кодом, заданным шестнадцатеричным числом ???? . К примеру, \x042F (буква Я). Нужно заметить, что коды символов здесь не могут превышать 65535.
|
Кодирование символов | \u{N}, \x{N} | Соответствует символу с кодом, заданным шестнадцатеричным числом ?????? . К примеру, \u{1F642} (символ эмоции 🙂). N может находиться в диапазоне 0..10FFFF.
|
Кодирование символов | \? | Символ экранирования \ может использоваться для вставки символов, которые иначе трактовались бы как особые последовательности или спец. символы. К примеру \\ (задает сам символ \) или \[ (задает сам символ [). ? может быть любым символом из набора: " ".."@", "[", "\", "]", "^", "_", "`", "{" и далее до конца таблицы юникода.
|
Кодирование символов | \Q ... \E | Экранирование группы символов "..." начинается с помощью последовательности \Q и заканчивается последовательностью \E, все символы внутри не будут трактоваться как особые последовательности или спец. символы. К примеру \Q+*\E (задает два символа +*).
|
Наборы символов | [...] | Конструкция задает набор символов, символ сравниваемого текста будет соответствовать, если он будет равен любому символу из списка, представленного данным набором. Внутри конструкции можно использовать не только символы, но и последовательности символов (A-Z ), конструкции экранирования \Q ... \E и \?, конструкции кодирования символов (\x?? и пр.), спец. символы (\n и пр.), спец. наборы (\d или \D) и наборы юникода (\p{Decimal_Digit_Number} и пр.).
|
Наборы символов | [^...] | Конструкция задает набор символов, символ сравниваемого текста будет соответствовать, если он не будет равен ни одному символу из списка, представленного данным набором. Внутри конструкции можно использовать не только символы, но и последовательности символов (A-Z ), конструкции экранирования \Q ... \E и \?, конструкции кодирования символов (\x?? и пр.), спец. символы (\n и пр.), спец. наборы (\d или \D) и наборы юникода (\p{Decimal_Digit_Number} и пр.).
|
Наборы символов | . | Специальный символ соответствует любому символу текста, кроме набора [\r\n\u2028\u2029]. |
Наборы символов | \C | Конструкция соответствует коду символа, полученному из двух байтов текста -- data point (каждый UTF-16 символ может быть представлен как двумя, так и четырьмя знаками см. Строки). Не рекомендуется к использованию. |
Наборы символов | \d | Конструкция задает набор числовых символов, соответствующий набору [0-9] .
|
Наборы символов | \D | Конструкция задает набор нечисловых символов, соответствующий набору [^0-9] .
|
Наборы символов | \w | Конструкция задает набор числовых и литерных символов, соответствующий набору [A-Za-z0-9_] .
|
Наборы символов | \W | Конструкция задает набор не числовых и не литерных символов, соответствующий набору [^A-Za-z0-9_] .
|
Наборы символов | \s | Конструкция задает набор символов пробела и невидимых символов, соответствующий набору [\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] .
|
Наборы символов | \S | Конструкция задает набор символов, не соответствующих символам пробела и невидимым символам. Соответствует набору [^\f\n\r\t\v\u0020\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] .
|
Наборы символов | \p? | Конструкция задает набор символов, соответствующих одной из групп таблицы юникода. ? может соответствовать символам: L -- буквенные символы (letter), M -- символы разметки (mark), N -- числовые символы (number), P -- символы пунктуации (punctuation), S -- рисунки и прочие символы (symbol), Z -- символы разделителей (separator), C -- остальные коды (other). Подробнее см. сл. таблицу. |
Наборы символов | \P? | Конструкция задает набор символов, не соответствующих одной из групп таблицы юникода, и является обратной по отношению к \p?. |
Наборы символов | \p{Group} | Конструкция задает набор символов, соответствующих разнообразным группам таблицы юникода. Group чувствительна к регистру и может соответствовать комбинациям: L, Letter, Ll, Lowercase_Letter, Lu, Uppercase_Letter, Lt, Titlecase_Letter, L&, Cased_Letter, Lm, Modifier_Letter, Lo, Other_Letter, M, Mark, Mn, Non_Spacing_Mark, Mc, Spacing_Combining_Mark, Me, Enclosing_Mark, Z, Separator, Zs, Space_Separator, Zl, Line_Separator, Zp, Paragraph_Separator, S, Symbol, Sm, Math_Symbol, Sc, Currency_Symbol, Sk, Modifier_Symbol, So, Other_Symbol, N, Number, Nd, Decimal_Digit_Number, Nl, Letter_Number, No, Other_Number, P, Punctuation, Pd, Dash_Punctuation, Ps, Open_Punctuation, Pe, Close_Punctuation, Pi, Initial_Punctuation, Pf, Final_Punctuation, Pc, Connector_Punctuation, Po, Other_Punctuation, C, Other, Cc, Control, Cf, Format, Co, Private_Use, Cs, Surrogate, Cn, Unassigned, InBasic_Latin, InLatin-1_Supplement, InLatin_Extended-A, InLatin_Extended-B, InIPA_Extensions, InSpacing_Modifier_Letters, InCombining_Diacritical_Marks, InGreek_and_Coptic, InCyrillic, InCyrillic_Supplementary, InArmenian, InHebrew, InArabic, InSyriac, InThaana, InDevanagari, InBengali, InGurmukhi, InGujarati, InOriya, InTamil, InTelugu, InKannada, InMalayalam, InSinhala, InThai, InLao, InTibetan, InMyanmar, InGeorgian, InHangul_Jamo, InEthiopic, InCherokee, InUnified_Canadian_Aboriginal_Syllabics, InOgham, InRunic, InTagalog, InHanunoo, InBuhid, InTagbanwa, InKhmer, InMongolian, InLimbu, InTai_Le, InKhmer_Symbols, InPhonetic_Extensions, InLatin_Extended_Additional, InGreek_Extended, InGeneral_Punctuation, InSuperscripts_and_Subscripts, InCurrency_Symbols, InCombining_Diacritical_Marks_for_Symbols, InLetterlike_Symbols, InNumber_Forms, InArrows, InMathematical_Operators, InMiscellaneous_Technical, InControl_Pictures, InOptical_Character_Recognition, InEnclosed_Alphanumerics, InBox_Drawing, InBlock_Elements, InGeometric_Shapes, InMiscellaneous_Symbols, InDingbats,InMiscellaneous_Mathematical_Symbols-A, InSupplemental_Arrows-A,InBraille_Patterns, InSupplemental_Arrows-B, InMiscellaneous_Mathematical_Symbols-B, InSupplemental_Mathematical_Operators, InMiscellaneous_Symbols_and_Arrows, InCJK_Radicals_Supplement, InKangxi_Radicals, InIdeographic_Description_Characters, InCJK_Symbols_and_Punctuation, InHiragana, InKatakana, InBopomofo, InHangul_Compatibility_Jamo, InKanbun, InBopomofo_Extended, InKatakana_Phonetic_Extensions, InEnclosed_CJK_Letters_and_Months, InCJK_Compatibility, InCJK_Unified_Ideographs_Extension_A, InYijing_Hexagram_Symbols, InCJK_Unified_Ideographs, InYi_Syllables, InYi_Radicals, InHangul_Syllables, InHigh_Surrogates, InHigh_Private_Use_Surrogates, InLow_Surrogates, InPrivate_Use_Area, InCJK_Compatibility_Ideographs, InAlphabetic_Presentation_Forms, InArabic_Presentation_Forms-A, InVariation_Selectors, InCombining_Half_Marks, InCJK_Compatibility_Forms, InSmall_Form_Variants, InArabic_Presentation_Forms-B, InHalfwidth_and_Fullwidth_Forms, InSpecials . Для дополнительной информации, см. таблицу простых наборов, описание категорий и диапазонов или полную таблицу выделенных символов юникода.
|
Наборы символов | \P{Group} | Конструкция задает набор символов, не соответствующих одной из групп таблицы юникода, заданных словом Group, и является обратной по отношению к \p{Group}. |
Конструкции проверки позиции | ^ | Конструкция соответствует положению в тексте, перед началом всего текста или любой строки (строки разделяются двумя символами \x0D\x0A). Поведение можно модифицировать (не включать начало каждой строки с помощью аргумента Флаги функций для работы с регулярными выражениями). |
Конструкции проверки позиции | \A | Конструкция соответствует положению в тексте, перед началом всего текста (в отличие ^ не модифицируется). |
Конструкции проверки позиции | $ | Конструкция соответствует положению в тексте, после окончания всего текста или после последнего символа любой строки (строки разделяются двумя символами \x0D\x0A). Поведение можно модифицировать (не включать конец каждой строки с помощью аргумента Флаги функций для работы с регулярными выражениями). |
Конструкции проверки позиции | \Z | Конструкция соответствует положению в тексте, после окончания всего текста, но перед последним символов перевод строки (\x0D\x0A), если таковой присутствует. |
Конструкции проверки позиции | \z | Конструкция соответствует положению в тексте, после окончания всего текста. |
Конструкции проверки позиции | \b | Конструкция "граница слов" соответствует положению в тексте, где предыдущий и последующий символы принадлежат разным группам из наборов [A-Za-z0-9_] и [^A-Za-z0-9_] .
|
Конструкции проверки позиции | \B | Конструкция "не граница слов" соответствует положению в тексте, где предыдущий и последующий символы принадлежат одинаковым группам из наборов [A-Za-z0-9_] и [^A-Za-z0-9_] .
|
Конструкция перечисления | ...|...|... ... | Конструкция перечисления соответствует месту в тексте, которому соответствует любое из выражений внутри ее. Конструкция может работать как для всего регулярного выражения, так и для конкретной группы. Каждое выражение конструкции может быть произвольным регулярным выражением. Примеры: red|green , \b(red|green|blue)\b .
|
Группы проверки | (?=...) | Положительная группа проверки вперед соответствует положению в тексте после которого будет следовать кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: \S+\s+(?=XVI?)[IVX]+ найдет "Людовик XV" в строке "Людовик XV — король Франции c 1 сентября 1715 года".
|
Группы проверки | (?!...) | Отрицательная группа проверки вперед соответствует положению в тексте после которого не будет следовать кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: \S+\s+(?!XVI)[VXI]+ найдет "Людовик XV" в строке "Людовик XV — король Франции c 1 сентября 1715 года", однако, не найден ничего в строке "Людовик XVI — король Франции c 4 сентября 1791 года".
|
Группы проверки | (?<=...) | Положительная группа проверки назад соответствует положению в тексте перед которым должен находиться кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: \S+(?<=Людовик)\s+[IVX]+ найдет "Людовик XV" в строке "Людовик XV — король Франции c 1 сентября 1715 года".
|
Группы проверки | (?<=...) | Отрицательная группа проверки назад соответствует положению в тексте перед которым не должен находиться кусок текста, соответствующий регулярному выражению в группе. Проверка не передвигает позицию сравнения, она остается на прежнем месте. Пример: \S+(?<!Луи)\s+[IVX]+ найдет "Людовик XV" в строке "Людовик XV — король Франции c 1 сентября 1715 года".
|
Группы выражений | (...) | Группа, содержащая произвольное регулярное выражение. Используется для удобства квантификации с символами типа "*", "+" и пр., для конструкций перечисления, а также возвращает последний найденный результат в соответствующих режимах функции MatchRE. Внутри групп разрешено использование других групп. Каждая группа имеет свой индекс, нумерация начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп). |
Группы выражений | (<Group>...) | Именованная группа, отличается от (...) только тем, что имеет кроме номера еще и имя. При обращении к результатам групп (к примеру с помощью \g{?}) можно указывать, как номер группы, так и наименование. При возврате результатов групп в функции MatchRE для именованных групп будет использовано имя, а для безымянных -- индекс. |
Группы выражений | (?:...) | Группа без результата, отличается от (...) только тем, что не будет присутствовать в результатах функции MatchRE и также не будет иметь индекса группы, т.е., к ней нельзя будет обратиться к помощью конструкций \g{?} или подобных. |
Группа комментария | (?#...) | Текст внутри данной группы не будет разбираться и участвовать в поиске результата. |
Ссылки на группы | \N, \gN, \g{N} | Число N задает индекс обычной или именованной группы, текущий из результатов которой будет использован для поиска для текущей позиции сравнения. Фактически является ссылкой на результат группы. Нумерация групп начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп). |
Ссылки на группы | \k<Group>, \g{Group} | Group задает имя именованной группы, текущий из результатов которой будет использован для поиска для текущей позиции сравнения. Фактически является ссылкой на результат группы по ее имени. |
Ссылки на группы | \g{-N} | Число N задает индекс обычной или именованной группы по отношению к последней заданной группе на данном этапе разбора шаблона, текущий из результатов которой будет использован для поиска для текущей позиции сравнения. Фактически является ссылкой на результат группы относительно к последней заданной. Нумерация групп начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп). |
Ссылки на группы | \g<N>, \g<Group>, \g<-N> | Текст шаблона группы, заданной индексом, именем или индексом отношения будет использован, начиная с текущей позиции шаблона. Фактически является ссылкой на шаблон группы, для упрощения общего шаблона, если в нем есть несколько одинаковых по описанию групп. Нумерация групп начинается с 1 и задается в последовательности левых открывающихся скобок (это имеет значение только для вложенных групп). Пример: (\S+) и (\g<1>) найдет "мам и пап" в строке "мам и пап", значение группы 1 будет равно "мам", а значение группы 2 будет равно "пап". Ссылка создает копию группы без результата, поэтому в примере, она добавлена в еще одну группу с результатом, чтобы показать разницу между \g{N} и \g<N>.
|
Условия в шаблоне | (?(N)...|...) | Число N задает индекс обычной или именованной группы, если группа вернула какое-либо значение (группа могла не вернуть значение, если она не была выполнена из-за предыдущего условия, либо не задавала квантификацию с количеством ноль), для дальнейшего поиска будет использован первый из шаблонов внутри конструкции, иначе -- второй (после знака |). Пример: (а)?(?(1)ма|па) найдет "ама" и два раза "па" в строке "мама и папа".
|
Условия в шаблоне | (?(?=...)...|...), (?(?!...)...|...), (?(?<=...)...|...), (?(?<!...)...|...) | Внутри условия задается одна из четырех групп проверки (см. выше), при поиске результата, если группа поиска нашла значение, для дальнейшего поиска будет использован первый из шаблонов внутри конструкции, иначе -- второй (после знака |). Пример: (?(?<=а)м|п) найдет "м" с позицией 3 и "п" с позицией 8 в строке "мама и папа".
|
Квантификаторы | ? (жадная конструкция, greedy) | Проверяет текст с текущей позиции поиска на совпадение с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкции (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадение не найдено, не передвигает позицию поиска, иначе передвигает ее. Иными словами, ищет 0 или 1 совпадений с предыдущим шаблоном. |
Квантификаторы | * (жадная конструкция, greedy) | Проверяет текст с текущей позиции поиска на совпадение с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкцией (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадение не найдено, не передвигает позицию поиска, иначе пытается найти как можно больше последовательных совпадений, и передвигает позицию поиска за последним найденным. Иными словами, ищет 0 или более совпадений с предыдущим шаблоном. |
Квантификаторы | + (жадная конструкция, greedy) | Проверяет текст с текущей позиции поиска на совпадение с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкцией (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадение не найдено, поиск для данной позиции будет завершен неудачей, иначе пытается найти как можно больше последовательных совпадений, и передвигает позицию поиска за последним найденным. Иными словами, ищет 1 или более совпадений с предыдущим шаблоном. |
Квантификаторы | {N}, {N,}, {N,M} (жадные конструкции, greedy) | Находит максимально возможное количество последовательных совпадений текста в диапазоне от N до M с текущей позиции поиска с предыдущим символом (если указан после символа), группой (если указан после группы) или конструкцией (перечисления, проверки позиции и т.д.), если указан после конструкции. Если совпадения не найдены, поиск для данной позиции будет завершен неудачей, позицию поиска передвигается за последним найденным. Для конструкции {N} ищется точное N совпадений, для {N,} -- максимальное количество, но не меньше N, для {N,M} -- максимальное количество из диапазона [N..M]. Иными словами, ищет от N до M совпадений с предыдущим шаблоном. |
Квантификаторы | ??, *?, +?, {N}?, {N,}?, {N,M}? (ленивые конструкции, lazy) | В отличие от жадных квантификаторов (см. выше), данные находят минимальное возможное количество совпадений. |
Квантификаторы | ?+, *+, ++, {N}+, {N,}+, {N,M}+ (собственнические конструкции, possessive) | В отличие от жадных квантификаторов (см. выше), данные находят максимально возможное количество совпадений, и не отдают результата, если для него требуется меньшее, чем максимальное найденное количество совпадений. Использование таких квантификаторов совместно с жадными или ленивыми в объемном тексте может привести с многократному замедлению поиска (до многих порядков), так как системе придется перебирать гораздо большее количество шагов, поэтому использовать их нужно с осторожностью (к примеру .+(.++)ы+ для сравнительно небольшого текста будет являться причиной миллионов итераций).
|
Идентификатор | Статус | Тип | Визуальная | Параметры | Описание |
---|---|---|---|---|---|
MatchRE, PosRE | Реализована | Функция | MatchRE(<Выражение (STRING)>,<Строка, в которой происходит поиск (STRING)>,<Позиция начала поиска (INT)>=0,<Длина найденного (INT)>,<Режим поиска (INT)>=0,<Флаги поиска (INT)>=0):<Позиция, список или таблица (INT,LIST,TAB)> | Производит проверку шаблона регулярных выражений, заданного первым аргументом в тексте, заданным вторым аргументом. В зависимости от режима поиска может возвратить найденную позицию или ноль, список найденных значений (и значений групп поиска), либо таблицу позиций найденных значений (и значений групп поиска). | |
ReplaceRE | Реализована | Функция | ReplaceRE(<Строка, в которой происходит поиск (STRING)>,<Выражение (STRING)>,<Шаблон для замены (STRING)>,<Позиция начала поиска (INT)>=0,<Максимальное количество замен (INT)>=0,<Флаги поиска (INT)>=0):<Текст результата (STRING)> | Производит проверку шаблона регулярных выражений, заданного вторым аргументом в тексте, заданном первым аргументом. Возвращает текст, с заменой найденных в нем значений на текст или шаблон, заданный третьим аргументом. | |
TearStrRE | Реализована | Функция | TearStrRE(<Строка, в которой происходит поиск (STRING)>,<Выражение (STRING)>,<Максимальное количество результатов для деления (INT)>=0,<Флаги поиска (INT)>=0):<Список результатов деления (LIST)> | Производит проверку шаблона регулярных выражений, заданного вторым аргументом в тексте, заданном первым аргументом. Возвращает список отрывков текста, находившихся между найденными выражениями. Останавливает процесс деления текста при достижении максимального количества делений, последний отрезок текста (для которого, возможно, проверка не была закончена), также добавляется в результирующий список. |