/ / Regex негативний пошук не працює, як очікувалося, - регулярний вираз

Рівень виноску негативний вигляд не працює, як очікувалося - регулярний вираз

У мене є наступний регулярний вираз:

[a-zA-Z0-9. ]*(?!cs)

і рядок

Hotfix H5.12.1.00.cs02_ADV_LCR

Я хочу відповідати лише доти

Hotfix H5.12.1.00

Але регулярне вираження відповідає "cs02"

Чи не повинні ви негативні підказки виконати роботу?

Відповіді:

0 для відповіді № 1

Ви можете розглянути можливість використання загартований жадібний жетон:

(?:(?!.cs)[a-zA-Z0-9. ])*

Див регулярний вираз демонстрації.

Це буде працювати незалежно від того .cs присутній у рядку чи ні, тому що загартований жадібний маркер відповідає будь-яким символам 0+ із [a-zA-Z0-9. ] клас персонажів, якого немає .cs.


0 для відповіді № 2

Потрібно використовувати позитивний lookahead замість негативного lookahead.

[a-zA-Z0-9. ]*(?=.cs)

або

[a-zA-Z0-9. ]+(?=.cs)

Зауважте, що ваш регулярний вираз [a-zA-Z0-9. ]*(?!cs) жадібний і відповідає всім персонажам, поки не досягне межі, за якою не слід cs. Побачити тут.

Спочатку візерунок [a-zA-Z0-9. ]+ матчі Hotfix H5.12.1.00.cs02 жадібно, тому що цей зразок жадібно відповідає алфавітам, крапкам та пробілам. Як тільки він побачить графік підкреслення, він припиняє збігатися там, де дві умови виконані,

  1. _ не виграєш [a-zA-Z0-9. ]+
  2. _ не cs

Це працює також для двох наступних матчів.