2017-01-25 3 views
1

Я хотел бы, чтобы соответствовать этим:Regex строка матч, если не просто пробел (но разрешить пробелы, если другие символы присутствуют)

*this string* 

Но не следующее:

* * 

Я попытался это:

(?<!\*\*)(?<=\*)[^\*]+(?=\*)(?!\*\*) 

Но он будет соответствовать второму прецеденту. Чтобы исправить это, я попытался изменить [^\*]+ на [^\*\s]+, но тогда он не будет соответствовать первому.

Заранее спасибо.

+1

Попробуйте следующее: '^ (\\ +) (\\ w +) (=) (\\ s * \\ S + \\ s *) + $' –

+1

Ну, попробуйте '(?

ответ

1

Если вы хотите, чтобы избежать согласования только пробельные символы между двумя * с, вы можете добавить еще один предпросмотр, (?!\s+\*):

(?<!\*\*)(?<=\*)(?!\s+\*)[^*]+(?=\*)(?!\*\*) 
       ^^^^^^^^^ 

ВИДЕТЬ regex demo

Убедившись, что нет ** перед тем текущее местоположение (с (?<!\*\*) и что есть * спереди (с (?<=\*)), отрицательный внешний вид l совпадение, если есть 1+ пробелы, а затем * сразу после текущего местоположения.

+1

Другое возможное решение - в случае, если вы просто хотите, чтобы '*' был «приклеен» к символам слов, - это добавление границ слов до и после '[^ *] +' part: ['(?

+0

Это прекрасно - используя отрицательный lookahead (не), соответствующий пробелу, а затем '*' было так просто :) Спасибо. – user3668541

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