Регулярное выражение: не совпадать, если шаблон начинается с / - PullRequest
0 голосов
/ 07 января 2019

Мое регулярное выражение (PCRE):

\b([\w-.]*error)\b(?:[^-\/.]|\.\W|\.$|$)

- это совпадение (фактическое совпадение окружено звездами):

**this.is.an.error**  
**this.IsAnerror**  
**this.is.an.error**.  
**this.is.an.error**(  
bla **this_is-an-error**  
**this.is.an.error**:  
this is an (**error**)  

не соответствует:

this.is.an.error.but.dont.match  
this.is.an.error-but.dont.match  
this.is.an.error/but.dont.match  
this.is.an.error/  
/this.is.an.error 

для этого образца: /this.is.an.error Мне не удается создать условие, которое будет отклонять все совпадение, если оно начинается с символа /. каждая комбинация, которую я пробовал, приводила к некоторому частичному улову (что нежелательно).

Есть ли какой-нибудь простой или причудливый способ сделать это?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Добавьте к вашему регулярному выражению \/.*|:

\/.*|\b([\w-.]*error)\b(?=[^-\/.]|(?:\.\W?)?$)

Теперь, как и прежде, первая группа захвата удерживает нужную часть.

Смотрите демо здесь

Примечание. Я сделал некоторые изменения в вашем регулярном выражении, чтобы удалить ненужные изменения.

0 голосов
/ 07 января 2019

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

(?<!\/)(?<=[^\w-.])([\w-.]*error)\b(?:[^-\/.]|\.\W|\.$|$)

Пояснение:

  • (?<!\/) - отрицательный взгляд сзади, гарантирующий отсутствие / перед первым символом;
  • (?<=[^\w-.]) - реализация границы слова с учетом вашего расширенного определения символов, принятых для слова [\w-.];

Демо

...