PHP.mk документација

Асерции

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

regexp.reference.assertions.php PHP.net прокси Преводот се освежува
Оригинал на PHP.net
Патека regexp.reference.assertions.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + превод во позадина Кодовите, табелите и белешките остануваат читливи во истиот тек.
Асерции

Референца за `regexp.reference.assertions.php` со подобрена типографија и навигација.

regexp.reference.assertions.php

Асерции

An assertion is a test on the characters following or preceding the current matching point that does not actually consume any characters. The simple assertions coded as \b, \B, \A, \Z, \z, ^ and $ are described in секвенци за бегство. Посложените проверки се кодираат како подшари. Постојат два вида: оние што . Посложени тврдења се кодираат како подшаблони. Постојат два вида: оние што гледаат напред од тековната позиција во низата на субјектот, и оние што it.

гледаат назад Подшаблонот за тврдење се совпаѓа на нормален начин, освен што не предизвикува промена на тековната позиција за совпаѓање. Тврдењата за гледање напред започнуваат со (?= за позитивни тврдења и (?! за негативни тврдења. На пример, \w+(?=;) совпаѓа збор проследен со точка-запирка, но не ја вклучува точка-запирката во совпаѓањето, и foo(?!bar) совпаѓа било која појава на "foo" што не е проследена со "bar". Забележете дека очигледно сличниот шаблон (?!foo)bar не наоѓа појава на "bar" што е претходена од нешто различно од "foo"; тој наоѓа било која појава на "bar" воопшто, бидејќи тврдењето (?!foo) е секогаш true кога следните три знаци се "bar". Потребно е тврдење за гледање назад за да се постигне овој ефект.

Тврдењата за гледање назад започнуваат со (?<= за позитивни тврдења и (?<! за негативни тврдења. На пример, наоѓа појава на "bar" што не е претходена од "foo". Содржината на тврдењето за гледање назад е ограничена така што сите низи што ги совпаѓа мора да имаат фиксна должина. Сепак, ако постојат неколку алтернативи, тие не мора сите да имаат иста фиксна должина. Така, (?<!foo)bar does find an occurrence of "bar" that is not preceded by "foo". A lookbehind assertion may match strings of variable length, up to an implementation-defined maximum length. Alternatives of differing lengths, such as (?<!dogs?|cats?) and top-level branches that can match more than one length, such as (?<=ab(c|de)) are permitted. The implementation of lookbehind assertions is, for each alternative, to temporarily move the current position back by the fixed width and then try to match. If there are insufficient characters before the current position, the match is deemed to fail. Lookbehinds in conjunction with once-only subpatterns can be particularly useful for matching at the ends of strings; an example is given at the end of the section on once-only subpatterns.

Prior to PHP 8.4.0, which bundles PCRE2 10.44, the contents of a lookbehind assertion were restricted such that all the strings it matched had to have a fixed length. If there were several alternatives, they did not all have to have the same fixed length, thus (?<=bullock|donkey) was permitted, but (?<!dogs?|cats?) caused an error at compile time. Branches that matched different length strings were permitted only at the top level of a lookbehind assertion. This was an extension compared with Perl 5.005, which required all branches to match the same length of string. An assertion such as (?<=ab(c|de)) was not permitted, because its single top-level branch could match two different lengths, but it was acceptable if rewritten to use two top-level branches: (?<=abc|abde)

совпаѓа "foo" претходено од три цифри што не се "999". Забележете дека секое од тврдењата се применува независно на истата точка во низата на субјектот. Прво има проверка дека претходните три знаци се сите цифри, потоа има проверка дека истите три знаци не се "999". Овој шаблон не совпаѓа "foo" претходено од шест знаци, од кои првиот се цифри, а последните три не се "999". На пример, не совпаѓа "123abcfoo". Шаблон за да се постигне тоа е (?<=\d{3})(?<!999)foo одговара на "foo" што му претходат три цифри кои не се "999". Забележете дека секоја од проверките се применува независно на истата точка во низата на субјектот. Прво се проверува дали претходните три знаци се сите цифри, а потоа се проверува дека истите три знаци не се "999". Овој шаблон не одговара на "foo" што му претходат шест знаци, од кои првите се цифри, а последните три не се "999". На пример, не одговара на "123abcfoo". Шаблон за да се направи тоа е (?<=\d{3}...)(?<!999)foo

Овој пат првата проверка гледа на претходните шест знаци, проверувајќи дека првите три се цифри, а потоа втората проверка проверува дека претходните три знаци не се "999".

Проверките можат да бидат вгнездени во која било комбинација. На пример, (?<=(?<!foo)bar)baz одговара на појава на "baz" на која ѝ претходи "bar" што пак не ѝ претходи "foo", додека (?<=\d{3}...(?<!999))foo е друг образец што одговара на "foo" на кое ѝ претходат три цифри и кои било три знаци што не се "999".

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

Проверките се бројат кон максимумот од 200 заградени под-обрасци.

Белешки од корисници

Нема белешки од корисници за оваа страница.
На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.