У мене є наступний регулярний вираз:
[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
жадібно, тому що цей зразок жадібно відповідає алфавітам, крапкам та пробілам. Як тільки він побачить графік підкреслення, він припиняє збігатися там, де дві умови виконані,
_
не виграєш[a-zA-Z0-9. ]+
_
неcs
Це працює також для двох наступних матчів.