2010-12-17 2 views
0

В каком регулярном выражении будет проверяться строка для слова, за которым не следует символ (? Я пробовал (\w+)(\?!\(), но он не работает, и (\w+)[^\(] соответствует любому, обрабатывая последнее письмо . как [^\(] части я использую язык программирования DРегулярное выражение для совпадения слова без (после него

Примеры вещей, которые должны соответствовать:.

Она должна соответствовать asdf в следующем:

asdf blah 
asdf.beef 
(asdf) 

, но не в них:

asdf(blah) 

Однако в asdf(blah), то blah будет соответствовать. Также в asdf blah и asdf.beef также должны быть сопоставлены blah и beef. ?.

+0

насчет `` blah` и beef`? Должны ли они быть исключены? – BeemerGuy 2010-12-17 03:54:11

+0

@BeemerGuy, извините, ошибочные примеры. Позвольте мне исправить это. – 2010-12-17 03:55:43

+0

какой язык? Вы ищете регулярное выражение perl? – killdash9 2010-12-17 04:08:05

ответ

4

Я ничего о возможностях двойки не знаю, если он поддерживает язык Perl регулярное выражение, вы можете сделать это:

\w+\b(?!\() 

The (?! хая) конструкция используется для нулевой ширины отрицательного предпросмотра. Вам нужна граница \ б слова, чтобы сохранить его от соответствия все, кроме последней буквы слова, которая сопровождаемый Paren.

РЕДАКТИРОВАТЬ: Я отлажены хорошая идея M42 в ниже, так что он работает в D. Попробуйте

(\w+)\b([^\(]|$) 

Первая группа захвата должна содержать слова, которые вы заинтересованы в

1

Как об этом один:.

/^\(?(\w+)\b(?:[^\(]|$)/ 

Не проверен с использованием D-компилятора, но он работает в Perl.

Согласно Russ комментарий, то (?:) конструкция неизвестна в D:

/^\(?(\w+)\b([^\(]|$)/