2013-11-11 6 views
2

Я пытаюсь получить регулярное выражение, чтобы соответствовать точному слову в качестве части замены ключевого слова. У меня есть следующие инструкции, чтобы проверить его против (слово здесь "Foo" (чувствительно к регистру)):

foo. 
foo 
foos 
foo . 
foo. 
@{foo} 
Foo. 
Foo space 
Foo 
Foo. 
Foo . 
    Foo. 
@{Foo} 
${Foo} 

Теперь я получил близко с:

\b(?![(\@|\$)\{])Foo\b 

и

\ bFoo \ б

Но я не могу заставить его отрицать на

@ {Foo} или $ {Foo} Если я пытаюсь и использовать

[^(\@\{)]\bFoo\b 

Это просто соответствует ведущие пробелы, где это не соответствует ранее. Мое Regex-Fu здесь слабо, и я действительно могу оценить хорошее решение, особенно то, которое может объяснить, как это сделать!

+0

С каким вкусом (языком) регулярного выражения вы работаете? – BlackVegetable

+0

Заявление Regex в C# – finman

+0

Просто чтобы понять, вы хотите, чтобы он соответствовал только 'Foo' без пробелов или специальных символов? – BlackVegetable

ответ

2

Try:

(?<![(@|\$)\{])\bFoo\b 

Проблема [^(\@\{)] в том, что он соответствует любому символу, который не в этом множестве, где, как вы хотите, чтобы проверить, что символ не является в этом наборе без фактического соответствия его ,

(?<!yourmatch) отрицательный внешний вид сзади, он проверяет наличие шаблона, не сопоставляя его.

+0

Это не подтверждает валидацию, о которой я упомянул, ошибочно утверждая, что @ {Foo} и $ {Foo} – finman

+0

не имеют C# здесь, поэтому тестируются только с помощью http://www.myregextester.com/?r=b80cfa99. Извинения – OGHaza

+0

Это не вопрос побега в том, что знак '@' это? – BlackVegetable

Смежные вопросы