Вопрос по pcre, regex, javascript – Есть ли в PCRE такая вещь, как «отрицательное чередование» или «отрицательные строковые классы», как «отрицательные символьные классы»?

0

Хорошо, так что в то время как шаблон[abc] соответствует одному символу,ab, или жеc, шаблон[^abc] соответствует любому данному персонажуне ,ab, или же .c

Теперь, если я заменюстрока заперсонаж в приведенном выше заявлении, это все равно будет применяться, если я также изменил первый шаблон на альтернативную конструкцию, как(abc|def|ghi), - это будет соответствовать последовательной строке из трех символов, равных,abcdef, или жеghi, Что я могу сделать, чтобы соответствовать любой строке из трех символов, которыене равно ,abcdef, или же ?ghi

Вы'пометил это оба "Javascript» а также "PCRE», Обратите внимание, что они делаютне имеют те же особенности в своих реализациях регулярных выражений, хотя они во многом похожи. IMSoP

Ваш Ответ

2   ответа
2

Это общий вопрос с регулярными выражениями, и короткий ответ "нет»способ работы регулярных выражений нене могу сказатьлюбая трехбуквенная строка, кроме ... ".

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

Важная вещь о Lookahead является то, что это "нулевая ширина» - это не такизрасходовать" любая строка. Таким образом, в Javascript вы можете сопоставить строку следующим образом:'abc123ghi'.match(/abc(?!def)...ghi/) -(?!def) говорит, что не долженэто будут буквы'def' после'abc', но... должен быть там, чтобы сказать, что там должны быть другие 3 символа.

@adlwalrus Да, это будет работать точно так же -.{3} в точности эквивалентно... IMSoP
Или это будет для abc, за которым не следует def, но yes, за которым следуют три последовательных символа, которые одинаковы друг с другом? wwaawaw
Да, я знал о негативном взгляде, но неЯ достаточно умен, чтобы придумать этот обходной путь. Во всяком случае, круто - спасибо! wwaawaw
Кстати, будет/abc(?!def).{3}ghi/ работать так же? wwaawaw
0

Вы можете использовать отрицательный взгляд, чтобы сделать то, что выповторяю:

xyz(?!abc|def|ghi)

Это означает "xyz, за которым следует все, кроме abc, def или ghi ", Это нена самом деле не потреблять источник, так что после этого выдобавлю вещи, которые должны продолжить матч после "хуг», То есть,

/xyz(?!abc|def|ghi)(\w*)/

Матчи "xyzhello»и первая группа захвата будет содержатьПривет".

Похожие вопросы