Делите путем


IsMatch, Match, и MatchAll функције

Односи се на: Цанвас апликације Цопилот Студио Апликације вођене моделом Повер Платформ ЦЛИ Датаверсе функције Повер Пагес

Тестови за меч или извлачи делове текстуалног низа на основу обрасца.

Опис

Функција IsMatch тестира да ли текстуални низ одговара обрасцу који може да садржи обичне знакове, унапред дефинисане обрасце или регуларни израз . И MatchMatchAll функције враћају оно што је упарено, укључујући и подутакмице.

Користи IsMatch се за потврђивање онога што је корисник откуцао у контролу уноса текста . На пример, потврдите да ли је корисник унео важећу адресу е-поште пре него што се резултат сачува у вашем извору података. Ако унос не одговара вашим критеријумима, додајте друге контроле које позивају корисника да поправи унос.

Користи се Match за издвајање првог текстуалног низа који одговара обрасцу и MatchAll за издвајање свих текстуалних низова који се поклапају. Екстракт подподударања за анализу сложених низова.

Match враћа запис информација за прво пронађено подударање и враћа табелу MatchAll записа за свако пронађено подударање. Запис или записи садрже:

Column Тип Опис
Именовани подмеч или подмечеви Текст Сваки именовани подмеч има своју колону. Креирајте именовани подмеч помоћу (? <Име>... ) у регуларном изразу. Ако именовани подмеч има исто име као и једна од унапред дефинисаних колона, подмеч има предност, и упозорење је генерисано. Преименујте подутакмицу да бисте избегли ово упозорење.
Комплетне утакмице Текст Цела текстуална ниска која се подударала.
Почетак утакмице Број Почетна позиција подударања у улазној текстуалној ниски. Први знак ниске враћа 1.
СубМатцхес , само ако се користи МатцхОптионс.НумбередСубМатцхс . Табела са једном колоном текста (колона Вредност) Табела нумерисаних подподударања у редоследу којим се појављују у регуларном изразу. Генерално , именовани подмечеви су лакши за рад и подстичу се. Користите ФорАлл функцију или Индекс функцију за рад са појединачним под-мечем. Ако нема подподударања су дефинисана у регуларном изразу, ова табела ће бити присутна али празна.

Ове функције подржавају MatchOptions. Подразумевано:

  • Ове функције изводе подударање које разликује велика и мала слова. Користите МатцхОптионс .ИгнореЦасе да бисте извршили подударања без разликовања великих и малих слова.
  • IsMatch подудара се са читавим текстуалним низом ( Цомплете МатцхОптион), док Match и MatchAll тражи меч било где у текстуалном низу ( Садржи МатцхОптион). Користите Complete, Contains, BeginsWith или EndsWith, како одговара вашем сценарију.

IsMatch Враћа труе ако се текстуални стринг поклапа са обрасцем или фалсе ако се не поклапа. Match враћа празно ако се не пронађе подударање које се може тестирати помоћу функције ИсБланк . MatchAll враћа празну табелу ако се не пронађе подударање које се може тестирати са ИсЕмптy функцијом.

Ако користите MatchAll за раздвајање текстуалног низа, размислите о коришћењу функције Сплит , која је једноставнија и бржа.

Обрасци

Кључ за коришћење ових функција је у опису обрасца који треба да се подудара. Описујете образац у текстуалној ниски као комбинацију:

  • Обичних знакова, као што су „abc“ или „123“.
  • Унапред дефинисани обрасци, као што су Писмо, MultipleDigits или Е-порука. (Енум Match дефинише ове обрасце.)
  • Кодови регуларног израза, као што су "\d+\s+\d+" или „[a-z]+“.

Комбинујте ове елементе користећи оператор стринг-цонцатенатион &амп; . На пример, "абц" & Дигит & "\с +" је важећи образац који одговара знаковима"а", "б" и "ц", након чега следи цифра од 0 до 9, а затим најмање један знак размака.

Обични знакови

Најједноставнији образац је низ обичних знакова који се тачно поклапају.

На пример, када се користи са функцијом IsMatch, стринг "Хелло" тачно одговара обрасцу "Хелло". Ни више ни мање. Стринг "hello!" се не поклапа са шаблоном због узвичника на крају и зато што је падеж погрешан за слово "х". (Погледајте Match опције за начине да се модификује ово понашање.)

У језику узорака, ликови . ? * + ( ) [ ] ^ $ | \ су резервисани за посебне намене. Да бисте користили ове знакове, или префикс карактера са \ (обрнута коса црта) да бисте означили да карактер треба узети буквално, или користите један од унапред дефинисаних образаца. На пример, можете упоредити низ "Hello?" користећи образац "Hello\\?" са обрнутом косом цртом пре упитника.

Унапред дефинисани обрасци

Унапред дефинисани обрасци омогућавају једноставан начин за подударање било ког скупа знакова или низа више знакова. Користите оператор стринг-цонцатенатион &амп; да комбинујете сопствене текстуалне низове са члановима енума:

Match садржина Опис Регуларни израз
Било који Одговара било ком знаку. .
Зарез Поклапа се са зарезом ,. ,
Цифра Подудара се са једном цифром (од „0“ до „9“). \d
Е-пошта Одговара адреси е-поште која садржи симбол „ет“ („@“) и назив домена који садржи тачку („.“) Види напомену
Цртица Подудара се са цртицом. - Види напомену
Српско-хрватски Одговара левој загради (. \(
Писмо Подудара се са словом. \p{L}
МултиплеДигитс Подудара се са једном или више цифара. \d+
МултиплеЛеттерс Подудара се са једним или више слова. \p{L}+
МултиплеНонСпацес Подудара се са једним или више знакова који не додају празан простор (а не размак, картицу или нови ред). \S+
МултиплеСпацес Подудара се са једним или више знакова који додају празан простор (размак, картицу или нови ред). \s+
Претраживање Подудара се са једним знаком који не додаје празан простор. \S
ОпционоЦифре Подудара се са нула, једном или више цифара. \d*
ОпционоПисма Подудара се са нула, једним или више слова. \p{L}*
ОпционоНонСпацес Подудара се са нула, једним или више знакова који не додају празан простор. \S*
ОпциониПростори Подудара се са нула, једним или више знакова који додају празан простор. \s*
Менструација Одговара тачки или тачки .. \.
ОМИЉЕНО Одговара десној загради ). \)
Простора Одговара знаку који додаје празан простор. \s
Картици Поклапа се са знаком за табулацију. \t

На пример, образац "А" &амп; МултиплеДигитс одговара слову "А" праћеном једном или више цифара.

Повер Аппс користи другачију дефиницију за Match. ЕМаил и Match. Цртица. Процените Text( Match.Email ) да бисте видели регуларни израз који користи ваш домаћин.

Регуларни изрази

Образац који користе ове функције назива се регуларни израз . Специфичан дијалект регуларних израза Повер Фx-а је детаљно описан у Регуларни изрази у Повер Фx-у .

Регуларни изрази су моћни и служе широком спектру сврха. Они такође могу изгледати као случајни низ интерпункцијских знакова. Овај чланак не описује све аспекте регуларних израза, али мноштво информација, туторијала и алата доступно је на мрежи.

Регуларни изрази имају дугу историју и доступни су у многим програмским језицима. Сваки програмски језик има свој дијалект регуларних израза, а постоји неколико стандарда. Трудимо се да осигурамо да исти регуларни израз даје исти резултат у свим имплементацијама Повер Фк-а. Компатибилност није лако постићи јер Power Fx ради на врху ЈаваСцрипт-а и .НЕТ-а који имају значајне разлике. Да би се прилагодили покретању на различитим платформама, Повер Фк регуларни изрази су ограничени на подскуп функција које су широко подржане у индустрији.

Као резултат тога, неки регуларни изрази који могу да раде у другим окружењима могу бити блокирани или захтевају подешавање у Повер Фк-у. Грешке у времену креирања се пријављују као неподржане функције. Ово је један од разлога због којих регуларни израз и опције морају бити временска константа ауторства, а не динамична (на пример, обезбеђена у варијабле).

Белешка

Повер Аппс користи ранију верзију Повер Фк регуларних израза која има мање ограничења, али и мање функција. МатцхОптионс.ДотАлл и МатцхОптионс.ФрееСпацинг нису доступни и дефиниције Match. Е -маил и Match. Цртице су различите. Уницоде сурогат парови се не третирају као један карактер. МатцхОптионс .НумбередСубМатцхес је подразумевани. Верзија регуларних израза описана овде ће ускоро бити доступна у Повер Аппс-у, под прекидачем "Повер Фк ВКСНУМКС компатибилност".

Ево неких основних елемената регуларних израза који граде сложеност у рашчлањивању броја.

Функција Пример Опис
Предфинирана класа карактера \d Овај регуларни израз одговара једном броју, као што је 1. Класа знакова одговара скупу знакова и \d одговара стандардним цифрама 0 и 9 цифрама дефинисаним у Уницоде категорији знакова "Нд". Постоје класе знакова за слова и бројеве са \w и размацима, укључујући нове редове са \s. Постоје и инверзне класе знакова које се пишу великим словима: \D одговара свему што \d то не чини.
Један или више \d+ Овај регуларни израз одговара једном или више бројева, као што је 123. А после елемента + каже"један или више" последњег елемента.
Нула или један \+?\d Овај регуларни израз одговара опционом + знаку иза којег следи један или више бројева, као +123 што су као и само 123. А ? после елемента каже "ово је опционо, може се десити нула или једном". Има + обрнуту косу црту испред себе да би се разликовао као буквалан карактер, а не као "један или више" употреба.
Груписање и смењивање (-|\+)?\d+ Овај регуларни израз одговара или знаку + или , - опционо, а затим низу бројева, као -123 што су , +123, и 123. Овде уводимо два концепта који се често користе заједно. Прво, имамо заграде које групишу као скуп елемената заједно, за ? да делују на. Друго , имамо | оно што каже "или ово или оно".
Прилагођена класа карактера (-|\+)?\d+[eE][\-\+]?\d+ Овај регуларни израз додаје експонент у мешавину са две класе знакова, које одговарају +123e-12. Класа карактера је попут | измјене која пружа "меч једну од ових ствари" у компактнијем облику. Као и код +, - има посебно значење у класама знакова регуларног израза, тако да морамо да га побегнемо.
Нула или више (-|\+)?\d+\.?\d*[eE][\-\+]?\d+ Овај регуларни израз додаје децимални иза целог дела броја, као -123.456e-89 што је или -123.E+32. После \d децималне тачке * има квантификатор који каже "нула или више пута" за децималне цифре после .
Хватање група (?&lt;number&gt;(-|\+)?\d+\.?\d*)[eE](?&lt;exponent&gt;[\-\+]?\d+) На крају, додајемо групе за снимање за number и exponent. Не само да регуларни израз може да одговара целом низу, он такође може да извуче делове за употребу у вашим формулама, у овом случају део пре e (или E) и део после.

Ови примери дају само мали укус онога што регуларни изрази могу да ураде. Они се обично користе за потврђивање ИД бројева, адресе е-поште, бројеве телефона, датуме и времена, као и за извлачење информација из свих врста текстуалних датотека. Наставите своје путовање читајући Регуларни изрази у Повер Фк-у , експериментишите и користите веб да бисте сазнали више.

Match Опције

Измените понашање ових функција одређивањем једне или више опција, које комбинујете користећи стринг- уланчавање оператора ( &амп; ).

Нумерички MatchOptions Опис Утицај на регуларни израз.
МатцхОптионс.БегинсВитх Образац се мора подударати од почетка текста. Додаје ^ на почетак регуларног израза.
МатцхОптионс.Цомплете Подразумевано за IsMatch Повер Аппс. Образац се поклапа са читавим низом текста, од почетка до краја. Додаје ^ на почетак, а $ на крај регуларног израза.
МатцхОптионс.Цонтаинс Подразумевано за Match и MatchAll, и IsMatch изван Повер Аппс. Образац се мора појавити негде у тексту, али не треба га започињати или завршавати. Не мења регуларни израз.
МатцхОптионс.ДотАлл Мења понашање . (тачка) оператора да одговара свим знаковима, укључујући и нове линије. Није доступно у Повер Аппс. Не мења регуларни израз. Ова опција је еквивалент стандардном "с" модификатору за регуларне изразе.
МатцхОптионс.ЕндсВитх Образац се мора подударати са крајем ниске текста. Додаје $ на крај регуларног израза.
МатцхОптионс.ФрееРазмак Знакови белине, укључујући нове линије, се игноришу у регуларном изразу. Коментари на крају реда који почињу са а # се игноришу. Није доступно у Повер Аппс. Само мења како се синтакса регуларног израза. Ова опција је еквивалент стандардном "x" модификатору за регуларне изразе.
МатцхОптионс.ИгнореЦасе Велика и мала слова третира као идентична. Подразумевано је подударање осетљиво на велика и мала слова. Не мења регуларни израз. Ова опција је еквивалент стандардном „i“ модификатору регуларних израза.
МатцхОптионс.Мултилине Мења понашање ^ и $ да се подударају на крају линије. Не мења регуларни израз. Ова опција је еквивалент стандардном „m“ модификатору регуларних израза.
МатцхОптионс.НумбередСубМатцхес Именовани заробљавања су пожељни јер их је лакше разумети и одржавати. Перформансе се такође побољшавају јер се не задржавају непотребни снимци. Али за старије регуларне изразе, третира сваки скуп заграда као нумерисано хватање које је укључено у табелу СубМатцхес у резултату. Подразумевано у Повер Аппс. Не мења регуларни израз. Именовани снимци су онемогућени и \1 стил назад референце су омогућене.

Коришћење MatchAll је исто као и коришћење стандардног"г" модификатора за регуларне изразе.

Синтакса

IsMatch( Текст , образац [, Опције ] )

  • Текст – Обавезно. Ниска текста за тестирање.
  • Образац – Обавезно. Образац за тестирање као текстуална ниска. Повежите унапред дефинисане обрасце које енум дефинише Match или обезбеди регуларни израз. Образац мора бити константна формула без варијабли, извора података или других динамичких референци које се мењају како се апликација покреће. Имајте на уму да формула мора бити изражена као " Match. ПредефинедПаттерн " нпр. Match. Е-пошта
  • Опције – Опционо. Комбинација текстуалне ниске од нумеричких MatchOptions вредности. Подразумевано, MatchOptions.Complete се користи. Опције морају бити константна формула без варијабли, извора података или других динамичких референци које се мењају како се апликација покреће.

Match( Текст , образац [, Опције ] )

  • Текст – Обавезно. Ниска текста за подударање.
  • Образац – Обавезно. Образац за подударање као текстуална ниска. Повежите унапред дефинисане обрасце које енум дефинише Match , или обезбедите регуларни израз. Образац мора бити константна формула без икаквих варијабли, извора података или других динамичких референци које се мењају док се апликација покреће.
  • Опције – Опционо. Комбинација текстуалне ниске од нумеричких MatchOptions вредности. Подразумевано, MatchOptions.Contains се користи. Опције морају бити константна формула без икаквих варијабли, извора података или других динамичких референци које се мењају како се апликација покреће.

MatchAll( Текст , образац [, Опције ] )

  • Текст – Обавезно. Ниска текста за подударање.
  • Образац – Обавезно. Образац за подударање као текстуална ниска. Повежите унапред дефинисане обрасце које енум дефинише Match или обезбеди регуларни израз. Образац мора бити константна формула без варијабли, извора података или других динамичких референци које се мењају како се апликација покреће.
  • Опције – Опционо. Комбинација текстуалне ниске од нумеричких MatchOptions вредности. Подразумевано, MatchOptions.Contains се користи. Опције морају бити константна формула без варијабли, извора података или других динамичких референци које се мењају како се апликација покреће.

IsMatch Примери

Обични знакови

Замислите да ваша апликација има контролу за унос текста под називом TektInput1 . Корисници уносе вредности у ову контролу да би их сачували у бази података.

Корисници укуцају Хелло wорлд у TextInput1 .

Формула Опис Резултат
IsMatch( TextInput1.Text, "Hello world" ) Тестира да ли се унос корисника тачно подудара са ниском „Здраво свима“. Истина
IsMatch( TextInput1.Text, "Good bye" ) Тестира да ли се унос корисника тачно подудара са ниском „Довиђења“. лажан
IsMatch( TextInput1.Text, "hello", Contains ) Испитује да ли корисников унос садржи реч „здраво“ (осетљива на велика и мала слова). лажан
IsMatch( TextInput1.Text, "hello", Contains & IgnoreCase ) Испитује да ли корисников унос садржи реч „здраво“ (није осетљива на велика и мала слова). Истина

Унапред дефинисани обрасци

Формула Опис Резултат
IsMatch( "123-45-7890", Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit & Match.Digit ) Подудара се са бројем здравственог осигурања Сједињених Држава Истина
IsMatch( "joan@contoso.com", Match.Email ) Подудара се са е-адресом Истина
IsMatch( "123.456", Match.MultipleDigits & Match.Period & Match.OptionalDigits ) Подудара се са низом цифара, тачке, а затим нуле или више цифара. Истина
IsMatch( "123", Match.MultipleDigits & Match.Period & Match.OptionalDigits ) Подудара се са низом цифара, тачке, а затим нуле или више цифара. У тексту се не појављује тачка која треба да се подудара, тако да се овај образац не подудара. лажан

Регуларни изрази

Формула Опис Резултат
IsMatch( "986", "\d+" ) Подудара се са целим бројем већим од нуле. Истина
IsMatch( "1.02", "\d+(\.\d\d)?" ) Подудара се са позитивним износом валуте. Ако улаз садржи децималну тачку, унос мора да садржи и два нумеричка знака након децималне тачке. На пример, 3,00 је валидно, али 3,1 није. Истина
IsMatch( "-4.95", "(-)?\d+(\.\d\d)?" ) Подудара се са позитивним или негативним износом валуте. Ако улаз садржи децималну тачку, унос мора да садржи и два нумеричка знака након децималне тачке. Истина
IsMatch( "111-11-1111", "\d{3}-\d{2}-\d{4}" ) Подудара се са бројем здравственог осигурања Сједињених Држава. Проверава формат, тип и дужину наведеног поља за унос. Ниска која се подудара мора се састојати од три нумеричка знака, након којих следи цртица, затим два нумеричка знака, након којих слиједи цртица, а затим четири нумеричка знака. Истина
IsMatch( "111-111-111", "\d{3}-\d{2}-\d{4}" ) Исто као у претходном примеру, али једна од цртица није на месту у пољу. лажан
IsMatch( "AStrongPasswordNot", "(?!^[0-9]\*$)(?!^[a-zA-Z]\*$)([a-zA-Z0-9]{8,10})" ) Потврђује јаку лозинку која мора да садржи осам, девет или 10 знакова, најмање једну цифру и најмање један абецедни знак. Стринг не може да садржи посебне знакове. лажан

Matchи примери MatchAll

Формула Опис Резултат
Match( "Bob Jones <bob.jones@contoso.com>", "<(?<email>" & Match.Email & ")>") Издваја само део е-поште из података о контактима. {
Е -маил : " bob.jones@contoso.com",
ФуллМатцх : " <bob.jones@contoso.com>",
ПочетакУтакмица : 11
}
Match( "Bob Jones <InvalidEmailAddress>", "<(?<email>" & Match.Email & ")>" Издваја само део е-поште из података о контактима. Није пронађена ниједна законска адреса (нема знака @), па функција враћа blank. Празно
Match( Language(), "(<language>\w{2})(?:-(?<script>\w{4}))?(?:-(?<region>\w{2}))?" ) Издваја делове језика, скрипте и региона ознаке за језик, коју функција Language враћа. Ови резултати одражавају Сједињене Државе; погледајте документацију функције Language за више примера. Оператер (?: групише знакове без креирања другог подударања мањег нивоа. {
језик : "ср",
script: blank,
регион : "САД",
ФуллМатцх : "en-US",
СтартМатцх : 1
}
Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ) Извлачи сате, минуте и секунде из ISO 8601 вредности трајања. Издвојени бројеви су још увек у текстуалној ниски; користите функцију Value да их претворите у број пре него што се на њему изврше математичке операције. {
сати : "2",
минута : "1",
секунди : "39",
ФуллМатцх : "PT2H1M39S",
СтартМатцх : 1
}

Хајде да дубински прегледамо последњи пример. Ако желите да конвертујете овај низ у вредност датума / времена користећи функцију Време, морате појединачно проћи у именованим подподударностима. Да бисте то урадили, користите функцију Са која ради на запису који Match враћа:

With(
    Match( "PT2H1M39S", "PT(?:(?<hours>\d+)H)?(?:(?<minutes>\d+)M)?(?:(?<seconds>\d+)S)?" ),
   Time( Value( hours ), Value( minutes ), Value( seconds ) )
)

За ове примере додајте контролу Дугме, поставите њено својство OnSelect према овој формули, а затим изаберите дугме:

Set( pangram, "The quick brown fox jumps over the lazy dog." )
Формула Опис Резултат
Match( pangram, "THE", IgnoreCase ) Пронађите сва подударања од „THE“ у текстуалној ниски коју садржи променљива pangram. Стринг садржи два поклапања, али само прво се враћа јер ви користите Match , а не MatchAll. {
ФуллМатцх : "Тхе",
СтартМатцх : 32
}
MatchAll( pangram, "the" ) Пронађите сва подударања од „the“ у текстуалној ниски коју садржи променљива pangram. Тест разликује велика и мала слова, тако да је пронађена само друга инстанца од „the“. MatchAll За Панграм.
MatchAll( pangram, "the", IgnoreCase ) Пронађите сва подударања од „the“ у текстуалној ниски коју садржи променљива pangram. У овом случају, тест није осетљив на велика и мала слова, тако да су обе инстанце речи пронађене. MatchAll са ИгнореЦасе.
MatchAll( pangram, "\b\wo\w\b" ) Проналази све речи од три слова које имају „о“ у средини. "браон " је искључен јер то није реч од три слова и, стога, не одговара "\б" (граница речи). MatchAll за панграм са б, wо, w и б.
Match( pangram, "\b\wo\w\b\s\*(?<between>\w.+\w)\s\*\b\wo\w\b" ) Подудара се са свим знацима између „лисице“ и „пса“. {
between: "скаче преко успаваног",
FullMatch: "лисица скаче преко успаваног пса",
СтартМатцх : 17
}

Да бисте видели резултате MatchAll у галерији:

  1. На празном екрану уметните празну вертикалну контролу галерије .

  2. Подесите својство Ставке галерије на MatchAll( панграм, "\w +" ) или MatchAll( панграм, МултиплеЛеттерс ) .

    Галерија ставки.

  3. Изаберите „Додајте ставку са картице Уметање“ на средини контроле галерије за одабир предлошка галерије:

  4. Додајте контролу Ознака у предложак галерије.

  5. Подесите својство Текст ознаке на ThisItem.FullMatch.

    Галерија је испуњена сваком речју у нашем примеру текста. Да бисте видели све речи на једном екрану, промените величину шаблона галерије и контролу ознаке.

    Својство Text.