2012-02-17 4 views
4

Я пишу регулярное выражение, которое мне нужно, чтобы поймать строки, которые являются множественными, начиная с «get». Например, getContacts и getBuildings должны соответствовать регулярному выражению. Однако бывают случаи, когда текст может быть равен getDetails или get**Details. Я не хочу, чтобы регулярное выражение включало их.Regex, который исключает группу захвата

Я могу придумать регулярное выражение, которое включает соответствующую группу «Детали», но я хочу исключить эту группу захвата, а не включать ее.

[Gg]et?\w+([Dd]etail)s 

Я не очень силен в регулярных выражениях, но Heres мое понимание того, что я писал:

матч «г» или «G», а затем «ЕТ», по выбору любого символа слова, то согласующего группа, за которой следует «s».

Как я могу исключить результаты, имеющие слово «подробности»?

+0

Должно ли 'getDetailsAndBars' соответствовать или нет? – Qtax

+0

должно соответствовать 'getInfo'? ваше исходное регулярное выражение, похоже, исключает этот случай. – Gus

+2

Почему у вас есть знак вопроса в '[Gg] et?'? '' 'Просто делает опцию' t' опциональной. Это было ваше намерение? –

ответ

8

Что-то подобное может работать для вас:

\b[Gg]et(?!\w*[Dd]etails)\w+s\b 
+0

Отрицательный lookahead '(?! ...)' гарантирует, что детали не являются частью этого соответствия, '\ b' s используются для привязки соответствия в начале/конце слов, иначе 'GetBars' будет соответствовать в этом sting' setGetBarsX'. – Qtax

2

Я считаю, что вы ищете нулевой ширины отрицательного предпросмотра ...

http://www.regular-expressions.info/lookaround.html

[Gg]et(?![Dd]etail)\w+s 

Предполагая, что вы хотите, чтобы исключить "Получить подробную информацию", и "Get Info", но принять «Получить страницы "и„Получить MyDetails“(NB тянущаяся s в исходном регулярном выражении исключает„Get Info“уже)

+0

Возможно, вам понадобится хвост '\ b' или' $ ', чтобы вы не соответствовали' getSass' в 'getSassDetails'. – Phrogz

+0

Удивительный! Это ближе. Но похоже, что все еще соответствующие строки с деталями: http://regexr.com?301ut можете ли вы сказать мне, как исключить эти строки? – bittersweetryan

+0

-1, '?' После того, как 't' ошибочно, и op, похоже, указывает, что' Details' не должно быть смежным с 'get'. – Qtax

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