Как построить регулярное выражение для обнаружения слов, не смежных или заключенных в фигурные скобки - PullRequest
1 голос
/ 01 января 2012

Я застрял в проблеме с приложением.У меня есть следующие строки текста:

1) hi {my|your|his} name is {stacker|monster|overflow}
2) hi {my|your|his} job can be to {stacker|monster|overflow}
3) hi {my|your|his} car {stacker|monster|overflow}

Что я хочу:

одним нажатием кнопки выберите и замените те слова, которые не имеют {или } непосредственно перед или после слова, т.е. в строке 1 или 3, у нас нет такого слова.В строке 2 у нас есть «можно» и «быть».

Я использовал подстроки для проверки {или}, но это не работает.Я думал, что может быть регулярное выражение для проверки таких слов?

Спасибо и счастливого нового года.Довольно мило, что вы, ребята, помогаете в новый год :)

1 Ответ

1 голос
/ 01 января 2012
(?<![{}]\s+|\{[^{}]*)\b\w+\b(?!\s+[{}]|[^{}]*\})

делает это.

Объяснение:

(?<!        # Assert that we can't match this before the current position:
 [{}]\s*    # Any directly adjacent brace (plus optional whitespace)
|           # or
 \{[^{}]*   # an opening brace before any other brace.
)
\b\w+\b     # Match an entire word
(?!         # Assert that we can't match this after the current position:
 \s*[{}]    # Any directly adjacent brace (plus optional whitespace)
|           # or
 [^{}]*\}   # a closing brace before any other brace.
)

Предупреждение: сбой при вложении фигурных скобок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...