Регулярное выражение для сопоставления слова без (после него - PullRequest
0 голосов
/ 17 декабря 2010

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

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

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

asdf blah 
asdf.beef
(asdf)

, но не в этих:

asdf(blah)

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

Ответы [ 3 ]

4 голосов
/ 17 декабря 2010

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

 \w+\b(?!\()

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

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

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

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

1 голос
/ 17 декабря 2010

Как насчет этого:

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

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

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

/^\(?(\w+)\b([^\(]|$)/
0 голосов
/ 17 декабря 2010
(\w+)[^\(\w]

так что вы отрицаете и (и \ w?

...