2013-06-18 5 views
4

Попытка сопоставить слово, если оно не содержится в звездочках. Вот что я получил:Regular Expression Lookarounds

(?<!\*)\b(word)\b(?!\*)

Проблема заключается в том, что он не будет соответствовать *word или word* как положено, так как я хочу, чтобы соответствовать каждой перестановки за исключением *word*.

ответ

3

Попробуйте это решение, должно соответствовать любое слово, а не только «слово»:

(?<!\*)\b\w+\b|\b\w+\b(?!\*) 

Ключевым моментом здесь является поиск двух ситуаций, в которых может произойти звездочка, то есть в начале ИЛИ В настоящее время конец слова.

2

Тогда вам нужно чередование.

(?<!\*)\bword\b|\bword\b(?!\*) 

См. it on Regexr.

Ваша проблема в том, что все регулярное выражение не срабатывает, как только одно утверждение истинно. Мой способ разрешить * с одной стороны, но он не работает, когда * с обеих сторон.

1

Некоторые дивертисмент:
(?(?<=\*)word(?!\*)|word(?=\*))

Объяснение:

(?      # if 
    (?<=\*)    # there is * before 
     word(?!\*)  # then match word not followed by * 
     |    # else 
     word(?=\*)  # match word followed by * 
)      # end if 

Online demo